0

API 関数の使用に問題がありますQueueUserAPC。基本的に、作成WaitForSingleObjectしたEventオブジェクトを使用してループするだけの新しいスレッドを作成しました。このスレッドを、非同期で処理する必要があるランダムな関数呼び出しを割り当てることができる「孤独な」ワーカー スレッドにしたかったのです。

ただし、スレッドを作成すると、スレッドが作成された直後だけQueueUserAPC機能します。say, の直後に挿入し、Sleep の後に配置すると、前に(すぐに)実行しても機能しますが、関数は実行されません。Sleep(2000);CreateThreadQueueUserAPCSleep

スレッドに別のハンドルを使用してみました。イベント オブジェクトをリセットしてみました。QueueUserAPC動作しない場合の戻り値を確認しました (1 に等しく、MSDN ではゼロ以外の結果は操作の成功であると述べています)。

私はこれについて何をすべきかよくわかりません。どんな提案でも大歓迎です。

ありがとう!

JR

4

1 に答える 1

2

WaitForSingleObjectEx() を使用します。'Ex' アラート可能な待機呼び出しのいずれかが使用されない限り、APC はキューから取り出されず、スレッドによって実行されません。待機が WAIT_IO_COMPLETION を返した場合 - APC がスレッドによって実行されました。通常、その完了を無視するために、ある種のループが使用されます。

while(WAIT_IO_COMPLETION==WaitForSingleObjectEx(waithandle, INFINITE,true));
// do signalled stuff
于 2012-04-27T22:32:06.493 に答える