resumethread时如何传递参数?

还没淹死的鱼 2009-05-18 05:48:10
我的子线程处理如下:
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传递进去? 是不是可以用临界区?
...全文
170 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
还没淹死的鱼 2009-05-19
  • 打赏
  • 举报
回复
不过这样会不会影响效率呢? 并发时不会产生冲突吧?
还没淹死的鱼 2009-05-19
  • 打赏
  • 举报
回复
哦, 那这样应该可以吧:

定义全局变量:
SOCKET g_sid;
CRITICAL_SECTION g_cs;

调用时:
EnterCriticalSection(&g_cs);
g_sid = tempID;
LeaveCriticalSection(&g_cs);

在线程中应该就可以访问g_sid了吧? 执行代码在循环内, 挂起之前.

arong1234 2009-05-18
  • 打赏
  • 举报
回复
唤醒时是从上次执行被挂起的地方开始执行的,又不是从线程开始部分执行的,这时线程时不可能接收新参数的
因此ResumeThread是不能带所谓的“参数”的,你不可能从一个函数中间开始带参数执行
  • 打赏
  • 举报
回复
楼上说的很详细了
wutaihua 2009-05-18
  • 打赏
  • 举报
回复
ResumeThread 是将挂起的线程恢复,挂起线程的时候,只是不再给线程分配时间片。但是线程有保护现场的功能。ResumeThread以后,线程继续原来的工作,没有任何的影响。也不需要传递什么参数。原来是什么,现在还是什么。
hemdacker 2009-05-18
  • 打赏
  • 举报
回复
没必要,他在创建的时候你让干嘛他就会继续干嘛。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧