4

Windows スレッドは でサスペンドできますSuspendThread()か?

別のものから目覚めさせることはできますが、呼び出すことはできますSuspendThread(GetCurrentThreadId())か?

4

2 に答える 2

7

これは可能だと思われますが、わずかな変更があります (これについて議論している cygwin メーリング リストを参照してください):

SuspendThread(GetCurrentThread());

また、スレッドはそれ自体を一時停止する必要があるとMSDNが言っていることもわかりましたが、それは私にとって明確ではありません。私は引用します(ここから、私の強調):

この関数は、主にデバッガで使用するために設計されています。スレッド同期に使用するためのものではありません。ミューテックスやクリティカル セクションなどの同期オブジェクトを所有するスレッドで SuspendThread を呼び出すと、呼び出し元のスレッドが中断されたスレッドが所有する同期オブジェクトを取得しようとすると、デッドロックが発生する可能性があります。この状況を回避するには、デバッガーではないアプリケーション内のスレッドが、他のスレッドに自身を中断するように通知する必要があります。ターゲット スレッドは、このシグナルを監視して適切に応答するように設計する必要があります。

于 2013-07-31T09:14:18.767 に答える