- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ワーカスレッドAfxBeginThreadのスレッド起動を遅延させたい)
ワーカスレッドAfxBeginThreadのスレッド起動を遅延させる方法
このQ&Aのポイント
- マルチスレッド化しているアラームメールの起動間隔を伸ばすためにSleepを使用したが効果がなかった。
- OCNのメールサーバーを使用する際に、セッションの数を制限されているため、間隔なしにアラームメールが送信されてしまう。
- スレッドの起動間隔を遅延させるためにはAfxBeginThreadの後にSleepを挿入するが、現在の実装では効果がない。
- みんなの回答 (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 ); } }
補足
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++を勉強していこうかなぁと思いました、ありがとうございました。