线程中想保证代码的顺序执行. 好像要加什么机制,请指导.
 for (;;)
    {
        WaitForSingleObject (g_hInterruptEvent, dwWaitTimeout);
        nEvents = BspKbdGetScanCodes2 (dwScanCode, bKeyUp);        ......         for (iEvent = 0; iEvent < nEvents; ++iEvent)
        {
           ....
           DoSomething();
        }
        ......    }

解决方案 »

  1.   

    for (;;)
      {
      WaitForSingleObject (g_hInterruptEvent, dwWaitTimeout);
      nEvents = BspKbdGetScanCodes2 (dwScanCode, bKeyUp);  ......   for (iEvent = 0; iEvent < nEvents; ++iEvent)
      {
      ....
      DoSomething();
      }
      ......  }
    DoSomething()是一个有很多选择的函数.  在循环中,想要执行完上一次的DoSomething(), 再执行下一次的DoSomething(). 不要冲突.
      

  2.   

    如果你不是在DoSomething离开线程处理
    那你的需求就可以实现啊
    没有可能在DoSomething完成之前再次执行循环
      

  3.   

    DoSomething() 中调用了其它的全局函数.(DoSomething()大长了, 将它分解成多个全局函数.)这会有影响吗?
      

  4.   

    // 下面我要做的是依次下载每个文件,并显示下载文件的进度
    // 一个文件没下载不能下载别的文件//创建一个事件,返回一个句柄m_hEventStop = ::CreateEvent(NULL, TRUE, FALSE, NULL);while (true)
    {
    // 等待50毫秒,依照需求定,也可设为 INFINITE:
    DWORD dwRet = ::WaitForSingleObject(m_hEventStop, 50);
    if (WAIT_TIMEOUT != dwRet)
    break;
    int pros_s = GetProgress(Get_Url());}// ...
      

  5.   

    当然
    不过如果你的DoSomething()和其中调用的函数在主线程或其它线程中也用到并且访问了和操作了相同的数据那就需要做控制了