如何连续多次调用3个线程?

时间:2012-10-24 04:39:48

标签: c++ c windows multithreading

如何连续多次调用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

3 个答案:

答案 0 :(得分:2)

我认为你误解了这个概念。 ResumeThread表示重新启动线程,从头开始重新运行线程proc。它只是恢复以前停止的proc。

基本上有两种方法。

  1. 在每次迭代中创建新线程。
  2. 重写你的线程proc以“永远”生活,并使用事件与它同步。
  3. 请参阅此处:How to restart threads?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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