delegateその2

※途中です

前回のdelegateの説明は同期実行のみでした。同期実行とはすべての関数の実行が終了するまで呼び出し元に制御が返らないことを意味します。

delegateは非同期実行もサポートしています。非同期実行とは、処理を完了を待たずに制御が呼び出し元に返ることです。delegateの非同期実行はスレッドで行われ、そのスレッドはスレッドプールを利用するため呼び出しの負荷が少なくてすみます。

ただしdelegateを非同期で実行する場合、登録する関数は1つでなければなりません。2つ以上あると例外が発生します。

非同期で実行するにはBeginInvoke(), 終了を待つにはEndInvoke()を使います。

delegate void MyDele(void);
 
void myfunc(void)
{
 System::Threading::Thread::Sleep(3000);
}
 
int main()
{
 MyDele^ dele = gcnew MyDele(&myfunc);
 IAsyncResult^ result = dele->BeginInvoke(nullptr,nullptr);
 dele->EndInvoke(result);
 return 0;
}