• 締切済み

WaitForSingleObjectの復帰時間

質問です。 現在キューにたまったJobを複数のスレッドに処理させるプログラムを書いているのですがFPSが安定しません。 パフォーマンスを図ってみたところどうやらSetEventをしてからWaitForSingleObjectの復帰までに時間がかかっているようです。(1msec~45msec) スレッドの復帰はこれほど時間がかかってしまうものなのでしょうか。 解決策などを知っている方がいらっしゃいましたらご教授お願いいたします。 OS: Windows7 Professional 64bit Corei7 920 2.67GHz 言語: C++ ---- 以下おおまかなソース ---- // スレッド側 threadMain() {  bool isComplete; // Queueを処理し終わったらtrueに  while(true)  {   if( isComplete )   {    SetEvent( _completeEvent );    WaitForSingleObject( _runEvent, INFINITE );    checkTimer(); // SetEvent~WaitForSingleObjectまでの時間を計測(1msec~45msecほどかかってしまう)   }   --(Queueにたまったjobを処理)--  } } // メインスレッド側 startJob() {  --(Queueに処理させたいJobをためる処理)--  // スレッド開始  for( int i=0 ; i<threadNum ; ++i ) // 現在threadNumは4  {   _thread[i]->startTimer(); // 計測開始   SetEvent( _thread[i]->_runEvent );  }  // スレッドの処理待ち  for( int i=0 ; i<threadNum ; ++i )  {   WaitForSingleObject( _thread[i]->_completeEvent );  } } よろしくお願いします。

みんなの回答

回答No.1

Queueにたまったjobを処理するのに時間がかかってませんか? 試しにQueueにたまったjobの処理を外して動かしてみては? 多分1msecもかからないはずです。

melone9
質問者

補足

ご回答ありがとうございます。 jobを処理するところをコメントアウトしisCompleteをtrueにするようにしてみたのですが結果はかわらず30~60FPSをふらつきます。 ちなみにスレッドの数を1にするとFPSが下がる頻度が少なくなります。(1でも1分に1回程度55FPS程度になる)

関連するQ&A