1

これが私の問題です:

スレッドを作成しています

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 ()ましたが、何も役に立ちませんでした。

4

1 に答える 1