在循环中如何使用多线程,并在不产生阻塞情况下保证每个记数值都使用了?在线等待

cloudrain 2003-07-02 03:23:45
如题,俺的代码如下:
主线程为:
...
int nn=GetGraphCount();
while(nn--)
{
AfxBeginThread(DisplayProc,(LPVOID)&nn);
}
工作线程是:
UINT DisplayProc(LPVOID lParam)
{
int *nIndex=(int *)lParam;
....
}
可是随着主线程的循环执行,并不是每个循环值都传给辅助线程使用了。由于调用辅助线程时立即返回,所以辅助线程执行时记数值已经改变。咋保证在主线程不产生等待情况下,辅助线程将每个计数值都使用了?THX!
...全文
60 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdf123321 2003-07-04
  • 打赏
  • 举报
回复
同意
孤必有邻 2003-07-02
  • 打赏
  • 举报
回复
我觉得,直接传入n的值就可以了
AfxBeginThread(DisplayProc, (LPVOID)n);

UINT DisplayProc(LPVOID lParam)
{
int nIndex = (int)lParam;
....
}
In355Hz 2003-07-02
  • 打赏
  • 举报
回复
我想你不应该总是传入同一个地址,因为当线程看到这个地址的内容时,地址的内容可能已经被循环更改了。

// HANDLE g_hEvent = NULL; 全局变量
g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

int n = GetGraphCount();
while (n --)
{
AfxBeginThread(DisplayProc, (LPVOID)&n);
::WaitForSingleObject(g_hEvent, INFINITE);
}

UINT DisplayProc(LPVOID lParam)
{
int nIndex = *((int *)lParam);
::SetEvent(g_hEvent);

....
}
cloudrain 2003-07-02
  • 打赏
  • 举报
回复
大大们不屑一顾吗?:-(

15,471

社区成员

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

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