我的子线程处理如下:
DWORD WINAPI ExcuteTask(LPVOID pvoid)
{
        SOCKET sid;
        sid = (SOCKET)pvoid; while(1)
{
DWORD dwRet = WaitForSingleObject(hQuitEvent, INFINITE);
if(dwRet == WAIT_OBJECT_0)
{
break;//收到退出事件
}
//在这里我对Socketid接收数据,处理完毕后发送回去
SuspendThread(::GetCurrentThreadId()); }
return TRUE;
}
创建时可以把Socketid通过参数传递进去,但唤醒时就不行了.
唤醒此线程时用的是ResumeThread(hThread), 我怎么把Socketid传递进去? 是不是可以用临界区?

解决方案 »

  1.   

    ResumeThread 是将挂起的线程恢复,挂起线程的时候,只是不再给线程分配时间片。但是线程有保护现场的功能。ResumeThread以后,线程继续原来的工作,没有任何的影响。也不需要传递什么参数。原来是什么,现在还是什么。
      

  2.   

    唤醒时是从上次执行被挂起的地方开始执行的,又不是从线程开始部分执行的,这时线程时不可能接收新参数的
    因此ResumeThread是不能带所谓的“参数”的,你不可能从一个函数中间开始带参数执行
      

  3.   

    哦, 那这样应该可以吧:定义全局变量:
    SOCKET g_sid;
    CRITICAL_SECTION g_cs;调用时:
    EnterCriticalSection(&g_cs);
    g_sid = tempID;
    LeaveCriticalSection(&g_cs);在线程中应该就可以访问g_sid了吧? 执行代码在循环内, 挂起之前.