关于线程,一个小问题

sdcer777 2003-12-11 01:30:43
void MyFunc(...)
{
if(...)
{
//do sth
}
else
{
_beginthreadex(...)//本质上是用_beginthreadex开始一个新线程(当然,其中还有一些细节操作)
if(!hThreadHandle)//其中hTreadHandle是新线程的句柄。
{
AfxMessageBox("error");
}
else
AfxMessageBox("ok");//这一句很关键。(1)
}//函数结束。

//下面是我的新线程
UINT WINAPI NewThread(....)
{
//主要操作是复制文件
}

问题是:如果加入(1),程序运行成功,新线程就可以完成。可是不加入(1),程序就出现错误(主要是不能完成新线程里面的操作)。这是为什么呢?怎么修改?
...全文
18 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpingy 2003-12-11
  • 打赏
  • 举报
回复
线程的正确退出有时很麻烦.就像ManFred2ManFred(曼弗雷德)说的,不用MESSAGEBOX,也应该有适当的等待。可以用GetExitCodeThread来查看线程的运行情况。
sdcer777 2003-12-11
  • 打赏
  • 举报
回复
可是我发现,传入新线程内的参数(主窗口的对象中的成员(public型)),在新线程中变成了"???",不是实际的值,我感觉是这的事,可没有理由变成???呀,不是吗?
sdcer777 2003-12-11
  • 打赏
  • 举报
回复
应该没有退出主线程吧,感觉不是这的事啊。
ManFred2ManFred 2003-12-11
  • 打赏
  • 举报
回复
MyFunc()的返回不会导致主线城的退出吧?!如果是这样的话,是因为你程序里没有设置适当的等待,用来同步线程操作。MessageBox的出现等于是给了子线程一个执行时间。
sdcer777 2003-12-11
  • 打赏
  • 举报
回复
噢,上面AfxMessageBox("ok")后应该有一个"}",与第一个else对应。
补充一点,程序运行证明hThreadHandle肯定不为空(有效)

15,471

社区成员

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

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