2

如何多次顺序调用3个线程?例如:在迭代 1 中,执行顺序应该是“Thread0->thread1->thread2”,然后在迭代 2 中应该是相同的,即“Thread0 -> thread1->thread2”等等。示例代码只执行一次 3 个线程。它不会进行第二次迭代。

    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

我认为你误解了这个概念。ResumeThread意味着重新启动线程,而不是从头重新运行线程proc。它只是从之前停止的地方恢复proc。

基本上有两种方式。

  1. 在每次迭代中创建新线程。
  2. 重写您的线程过程以“永远”存在并使用事件与其同步。

参考这里:如何重启线程?

于 2012-10-24T04:55:49.463 回答
1

当您WaitForSingleObject()使用线程句柄调用时,您正在等待线程完成运行(当它从其线程进程返回时)。完成后,ResumeThread()将不再有任何影响。

于 2012-10-24T04:41:14.083 回答
1

您应该考虑使用事件来同步线程而不是 ResumeThread。

于 2012-10-24T04:46:31.367 回答