我的子线程处理如下:
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传递进去? 是不是可以用临界区?
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传递进去? 是不是可以用临界区?
因此ResumeThread是不能带所谓的“参数”的,你不可能从一个函数中间开始带参数执行
SOCKET g_sid;
CRITICAL_SECTION g_cs;调用时:
EnterCriticalSection(&g_cs);
g_sid = tempID;
LeaveCriticalSection(&g_cs);在线程中应该就可以访问g_sid了吧? 执行代码在循环内, 挂起之前.