mfc 线程问题 会报内存不可读来帮下忙吧

基于对话框的只有一个onok()在onok()里有一个线程线程没有任何执行可是在退出进还会出在这样。voidCMy11Dlg::OnOK(){//TODO:Addextr... 基于对话框的 只有一个onok() 在onok()里有一个线程 线程没有任何执行 可是在退出进还会出在这样。
void CMy11Dlg::OnOK() { // TODO: Add extra validation here CWinThread *th =AfxBeginThread(fun,this);
th->Run();//为了保证线程运行 CDialog::OnOK();}
UINT CMy11Dlg::fun(LPVOID pParam){ return 0;}
展开
 我来答
aesopwater
2013-10-17 · 超过13用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:22.8万
展开全部
根据你的函数,就是因为你线程里头什么都没有做,所以才会报错的。
因为当你调用afxbeginthread的时候,fun就已经执行了,可是因为fun函数里头什么都没有,所以函数马上就执行完成退出了。
当你使用th->run时,由于fun的进程已经结束,所以th指针指向的内存也已经释放,当然就不能为read了。
你应该在fun里头添加一个循环函数,如while(1){/*添加退出条件*/}你就可以测试线程的Run、SuspendThread等功能了。
另外,最好如bhtzu说的,把CDialog::OnOK();给注释掉
更多追问追答
追问
我不用run(),无法保证线程一定运行啊,主线程一结束,子线程就没了,没法保证执行,我才出此下策用.run()用他优先于主线程调用,请问有更好的办法要子线程一定执行吗?谢谢
追答
1.我不太明白你为什么要在OnOk的时候执行这个子线程,如果你这个是一个对话框的程序,当你调用OnOK的时候就是要结束所有执行的操作了,那还要子线程干什么工作呢,要这个子线程和什么做交互呢。
2.当你调用Afxbeginthread的时候,子线程就会执行了。你觉得子线程没有执行的原因不是因为没有启动,而是你的自线程里头没有持续执行的机制。子线程不是说你启动了就一直存在的,当子线程执行完指定操作后也是会退出的。
3.如果你是想程序退出后,子线程还在执行,那我觉得你的设计思路就是有问题了。一般要做后台程序,你可以做成服务类型的,或者把界面隐藏了。当子线程还在工作的时候,主线程还是会自工作的。
bhtzu
2013-10-17 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4223万
展开全部
void CMy11Dlg::OnOK() 
{
 // TODO: Add extra validation here
 CWinThread *th =AfxBeginThread(fun,this); 
th->Run();//为了保证线程运行
 //CDialog::OnOK();
}

注销基类调用看看。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式