アイドル処理を手動で[ストップ][スタート]

解決


扉たたき  2008-03-10 22:48:09  No: 67803

VC++2005 C++/CLI

先日、[VC++/CLIのアイドル処理]でお世話になったものです。
今回は、このアイドル処理を手動で[ストップ][スタート]したいと考えています。
まずは自分が試した方法を書くべきなのですが、情けないですが何も思い浮かんでいません。
よろしくお願いします。


tetrapod  2008-03-10 23:06:08  No: 67804

手動で、とは具体的にどのように操作するのか決めてある?

OnIdle() {
  if (!this->flag_todo) return; // ストップ中はなにもしない
  ...
}
とでもしておき flag_todo に0か1か値を設定すればいいような気が


Blue  2008-03-10 23:09:47  No: 67805

イベントハンドラを動的に削除・追加するようにする。
最初の状態はどっちになるのでしょうか?

フォームが立ち上がった瞬間からスタートしてもよいのであれば
>    Application::Idle += gcnew EventHandler(%frm, &Form1::OnIdle);
をForm_Loadに記述します。

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // メイン ウィンドウを作成して、実行します
    Application::Run(gcnew Form1());
    return 0;
}

Form1.h

        int counter;
    public:
        System::Void OnIdle(System::Object^ sender, System::EventArgs^ e)
        {
            ++this->counter;
        }
    private:
        void IdleStart()
        {
            Application::Idle += gcnew System::EventHandler(this, &Form1::OnIdle);
        }
        void IdleStop()
        {
            Application::Idle -= gcnew System::EventHandler(this, &Form1::OnIdle);
        }
        System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
        {
            MessageBox::Show(this->counter.ToString());      
        }
        System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e)
        {
            this->IdleStart();
        }
        System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
        {
            this->IdleStart();
        }
        System::Void button3_Click(System::Object^  sender, System::EventArgs^  e)
        {
            this->IdleStop();
        }

ただし、IdleStart->IdleStartと連続で押されるのを考慮していないのでフラグなり、
ボタンを触れなくするなりして対処してください。


Blue  2008-03-10 23:26:26  No: 67806

あ、フラグどうせ使うならtetrapodさんの方法で十分ですね。


扉たたき  2008-03-11 01:06:29  No: 67807

tetrapodさん、Blueさん、ありがとうございます。

そうですね。フラグを立てればよかったんですね。
何か特別な処理をしなければならないのでは・・・と、難しく考えすぎていたようです。
無事解決しました。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加