電子書籍の厳選無料作品が豊富!

質問です。
現在キューにたまった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 );
 }
}

よろしくお願いします。

A 回答 (1件)

Queueにたまったjobを処理するのに時間がかかってませんか?


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

この回答への補足

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

補足日時:2011/07/22 14:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!