线程引起溢出的问题!

szclm 2005-05-06 12:05:30
dword dwAddr = 0;
void funcA( void *pData )
{
(struct stA *) pstA = (struct stA *)pData;
//pWnd是全局的
dwAddr = (dword)pstA->pWnd;
}

//线程函数
void *funcB( void *pParam )
{
printf( "A point: %u\n", dwAddr );
...//do some thing
printf( "B point: %u\n", dwAddr );
...//do some thing
printf( "C point: %u\n", dwAddr );
return NULL;
}

int main(void)
{
for(;;)
{
//确保线程已结束
      sleep( 10000 );
printf( "D point: %u\n", dwAddr);
...//do some thing
printf( "E point: %u\n", dwAddr);
create_thread( NULL, NULL, funcB, NULL);
printf( "F point: %u\n", dwAddr);
}
return 0;
}

funcA是被先执行的,确保了dwAddr是有值!且执行后得到一个正确的值!
在main中多次启动了线程函数funcB,在第一次执行时A-F打印出来的值都是正确的!
但问题是第二次时,A-F打印是同一个值,但已经不正解了!

请问:各位高手,这样会是由于什么的情况引起的呢?
...全文
133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolstar14 2005-05-18
  • 打赏
  • 举报
回复
多线程却不考虑共享冲突的问题, 一定是脑子进水了.
BigFanOfCpp 2005-05-08
  • 打赏
  • 举报
回复
就算没有启用线程休眠,也不能保证线程立刻执行,除非在创建线程的函数后面立刻等待线程对象。
ghyd 2005-05-07
  • 打赏
  • 举报
回复
不要用sleep了,改用临界区或者信号量来做线城的同步
另外,我也看不出来funa()和你的线城函数是怎样关联的
jerry 2005-05-07
  • 打赏
  • 举报
回复
线程里不能使用MFC对象. 如 CWnd, CDC , 等
oyljerry 2005-05-07
  • 打赏
  • 举报
回复
控制一下线程的运行
输出一些信息来看执行的过程
szclm 2005-05-06
  • 打赏
  • 举报
回复
再补充一点:如果不create_thread的话,那么运行多少次值都是一样的!
Zark 2005-05-06
  • 打赏
  • 举报
回复
由于示例程序的不完整,很难分析.大致的可能是同步问题,而不是"溢出"问题,这一点是从"main中多次启动了线程函数funcB"猜出来的.
Practise_Think 2005-05-06
  • 打赏
  • 举报
回复
funcA的调用是否在循环里调用????

15,472

社区成员

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

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