• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ワーカスレッドAfxBeginThreadのスレッド起動を遅延させたい)

ワーカスレッドAfxBeginThreadのスレッド起動を遅延させる方法

このQ&Aのポイント
  • マルチスレッド化しているアラームメールの起動間隔を伸ばすためにSleepを使用したが効果がなかった。
  • OCNのメールサーバーを使用する際に、セッションの数を制限されているため、間隔なしにアラームメールが送信されてしまう。
  • スレッドの起動間隔を遅延させるためにはAfxBeginThreadの後にSleepを挿入するが、現在の実装では効果がない。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

AfxBeginThreadの 引数dwCreateにCREATE_SUSPENDEDを指定してスレッドを作成するようにしてみてはいかがでしょう その後 ResumeThreadメソッドでスレッド起動 WaitForSingleObjectなどを使ってスレッドが終了する毎に次スレッドのResumeThreadを呼んでみてはいかがでしょう ... for(i=0; i< ALARM_MAX;i++) { m_pThread[i] = AfxBeginThread( ThreadProcCL,(LPVOID)i,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); } for( i=0; i<ALAM_MAX; i++) { m_pThread[i]->ResumeThread(); while( WaitForSingleObject( m_pThread[i]->m_hThread, 100 )!= WAIT_OBJECT_0) { Sleep( 5 * 1000 ); } }

noname#204416
質問者

補足

while( WaitForSingleObject( m_pThread[i]->m_hThread, 100 )!= WAIT_OBJECT_0) { このコードは、プログラムが転けるので。 while( WaitForSingleObject( m_pThread[i]->m_hThread, 100 )!= WAIT_OBJECT_0) { こちらで良いのかと思いましたが・・・。 他のサイトでもこちらの書き方が多いですし。 後述のコード内容の認識として、100msec間隔でシグナル状態になっているか判断して抜けると思いますが、自信がありません。orz。  今回のことは大変役に立ちました。 もう一度VC++を勉強していこうかなぁと思いました、ありがとうございました。

関連するQ&A