多线程程序,被run函数阻塞

heraldw 2007-12-29 04:14:45
软件里面从CWinthread派生了一个线程,也重载了run函数
可是在主线程里面,执行run函数,却一定要等到run执行结束后,才能继续。

我希望的是启动这个线程后主线程立即可以干别的事情
我的code:
void dialog_realtime_show::OnBnClickedButton3()
{
CString text,caption;
caption="WARNING";
text="This action will kill all of RF card data from door camera\n";
text.LoadString(IDS_LONGTIME_HINT);
text+="Are you sure? (y/n)";
int a=MessageBox (text,caption,MB_ICONWARNING|MB_YESNO|MB_DEFBUTTON2);
if(a==IDYES)
{
#ifdef USE_DLG_THREAD
pATRT=new app_thread_read_attendance;
int a,b;
a=this->ssertup.SERIAL_PORT; b=this->ssertup.SERIAL_SPEED;
pATRT->setup_param(a,b,&this->edit_communication_status);
pATRT->m_pMainWnd=this;
pATRT->Run(); //准备在这里启动线程,没想到在这里阻塞了
//AfxBeginThread(*pATRT,GetSafeHwnd());
//AfxBeginThread(read_attendance,GetSafeHwnd());
#else
this->read_attendance();
#endif
}
else
return;
}
//=====================================
这是线程里面的模样:
int app_thread_read_attendance::Run(void)
{
int kkk=this->SERIAL_PORT+this->SERIAL_SPEED;
if(kkk>9600) //最少也要9600,如果大于,说明相应的参数被设置过了
{
this->read_attendance(); //这里要执行很久很久
}
else
return(-1);
return 0;
}
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwykj 2008-01-07
  • 打赏
  • 举报
回复
run 函数要 投递消息的!
不能拿它处理 大规模数据!

如果要处理 数据 起个工作者线程就行了!
heraldw 2008-01-07
  • 打赏
  • 举报
回复
我问的是:
我想要启动完这个线程后,主线程可以继续做别的
但是被中间的这个run堵塞了,why?
jameshooo 2008-01-02
  • 打赏
  • 举报
回复
那就是设计思路有问题,耗时计算应该被分解成多个子步骤,用循环来执行每个步骤,这样的话每次循环开始都可以做一些线程状态的判断,以方便退出或者响应用户消息,如果闷头计算,程序看起来是没有响应的,也无法被用户控制。
heraldw 2008-01-02
  • 打赏
  • 举报
回复
那个run函数在上面,里面没有消息循环呀
只有一大堆的计算,CPU闷着头在里面算
这样怎么办呀?
heraldw 2008-01-02
  • 打赏
  • 举报
回复
那我用AfxBeginThread来启动thread,是不是可以避免我的这个问题?
那我用AfxBeginThread来启动thread,是不是可以避免我的这个问题?
那我用AfxBeginThread来启动thread,是不是可以避免我的这个问题?
那我用AfxBeginThread来启动thread,是不是可以避免我的这个问题?
jameshooo 2007-12-29
  • 打赏
  • 举报
回复
Run()里面默认是执行消息循环,只有收到WM_QUIT消息才会退出,一般情况下表示线程该结束了。
你应该在创建线程之后再执行RUN,不过有一点必须注意,如果子线程结束后要求主线程也结束,必须要想办法让主线程的消息循环退出,也就是说必须向主线程发送一个WM_QUIT消息,可以在子线程结束时发送(Post)这个消息,或者在主线程中捕获线程退出事件,然后自己PostQuitMessage。如果你的主线程没有窗口或者不需要消息循环,你完全可以不执行RUN,而是直接等待子线程结束。
heraldw 2007-12-29
  • 打赏
  • 举报
回复
run 函数是不是 本来就是会阻塞 主线程的呀??
aa3000 2007-12-29
  • 打赏
  • 举报
回复
可以跟踪一下 run 函数做了些什么?

15,471

社区成员

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

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