0

C++ ビルダーなどの一部のプログラミング環境には、タイマー オブジェクトが作成された場所と同じ実行コンテキストで実行されるコールバック関数を備えたタイマー コンポーネントがあります。

スレッドを使用してプレーンな C++ で同様のことを行う方法を考えていました。または、何らかのタスクを実行するために定期的に呼び出され、呼び出し元のスレッドと同じ実行コンテキストで実行されるコールバックを持つ他の方法はありますか?

4

1 に答える 1

0

スレッドが独自のコンテキスト内でタイマー コールバックを処理できるかどうかは、タイマーの期限切れをスレッドに伝える方法に完全に依存します。スレッドは、いくつかのスレッド間通信を受信したときに、コールバック自体を呼び出す必要があります (たとえば、Windows メッセージ キューの入力を待機しているときに、Windows GUI スレッドが受信した WM_TIMER メッセージ)。スレッドが入力を待機していない場合、どの種類のタイマーからのスレッド間通信も処理できないため、独自のコンテキスト内でタイマー ハンドラー コールバックを呼び出すことはできません。

Forms.Timer、C++ ビルダーの Timer コンポーネントなどは、間隔ベースのスレッド間通知を調整する方法です。スレッドがこれらの通知をアクティブに待機して処理しない場合、そのスレッドのコンテキストでタイマー コールバックが存在しない可能性があります。 .

于 2012-11-04T13:42:36.627 に答える