これが私の問題です:
スレッドを作成しています
HANDLE Threads[THREAD_NUM]
スレッドを立ち上げる
void LaunchThread (int i) {
*some checks if the handle is not null etc*;
DWORD threadId;
threads[i] = CreateThread (
NULL,
0,
(LPTHREAD_START_ROUTINE)*StaticMethodInvokingTheThreadFunc,
*StructPassingToThatMethod ( basically have a pointer and thread number)*,
0,
&threadId);
*DebugMessage "thread created"*;
*DebugMessage "with id = (threadId)"*;
}
静的メソッドが関数を呼び出す
void DoSmth () {
*DebugMessage "thread func started"*;
...;
*then code with another messages all the way*;
}
待ち受け機能はシンプル
void WaitThread (i){
*DebugMessage "wait for thread to finish"*;
WaitForSingleObject (Threads[i], INFINITE);
}
そしてメイン関数では、シーケンス:
LaunchThread (i);
WaitThread (i);
プログラムは決してWaitThread ()
関数を返さず、(!) メッセージのリストは次のようになります
"thread created"
"thread func started" (and nothing done after that message in DoSmth () func)
"with id = .."
"wait for thread to finish"
これは1つのスレッドでも発生します...いくつかのスレッドの場合、私は単に持っています
for ( int t = 0; t < THREAD_NUM; t++)
LaunchThread (t);
スレッドを待機するための同じループ
なぜこうなった?スレッドへのハンドルを閉じて再起動しようとしResumeThread ()
ましたが、何も役に立ちませんでした。