2

3つのスレッドを連続して何度も呼び出す方法は?例:反復1では、実行順序は「Thread0-> thread1-> thread2」である必要があり、反復2では同じである必要があります(つまり、「Thread0-> thread1-> thread2」など)。サンプルコードは、3つのスレッドを1回だけ実行しています。2回目の反復にはなりません。

    Thread0 = CreateThread( NULL,0,ThreadProc0, NULL, CREATE_SUSPENDED, &ThreadID);
    Thread1 = CreateThread( NULL,0,ThreadProc1, NULL, CREATE_SUSPENDED, &ThreadID);
    Thread2 = CreateThread( NULL,0,ThreadProc2, NULL, CREATE_SUSPENDED, &ThreadID);

    for(i=0;i<iterations;i++)                //Iterations in calling threads
    {
        ResumeThread(Thread0);
        WaitForSingleObject(Thread0, INFINITE);
        ResumeThread(Thread1);
        WaitForSingleObject(Thread1, INFINITE);
        ResumeThread(Thread2);
        WaitForSingleObject(Thread2, INFINITE);
    }

    // Close thread and semaphore handles
4

3 に答える 3

2

あなたは概念を誤解していると思います。最初からスレッド proc を再実行するのではなく、スレッドを再起動ResumeThreadすることを意味します。以前に停止した場所から proc を再開するだけです。

基本的には2つの方法があります。

  1. 各反復で新しいスレッドを作成します。
  2. スレッド proc を「永久に」存続するように書き換え、イベントを使用してスレッド proc と同期します。

ここを参照してください:スレッドを再起動するには?

于 2012-10-24T04:55:49.463 に答える
1

スレッド ハンドルを使用して呼び出すWaitForSingleObject()と、スレッドが実行を終了するのを待機しています (スレッド プロシージャから戻るとき)。終了後は、ResumeThread()それ以上の効果はありません。

于 2012-10-24T04:41:14.083 に答える
1

ResumeThread の代わりにイベントを使用してスレッドを同期することを検討する必要があります。

于 2012-10-24T04:46:31.367 に答える