这种怎么开线程

枫青痕 2017-06-26 11:50:25
最近帮助同事做MFC项目, 项目是要和下位机通讯, 同事都没看线程,每次去和下位机通讯的时候软件直接假死了, 我本来想把按钮的实现方法封装起来, 每次点击事件都创建一个线程,把实现回掉传给线程,线程去执行按钮实现。

可是类成员函数不能当回掉传递,试了下友元也不行, 又不想改成全局,钥匙改全局 里面的cwnd子类都的改
请问有什么方案。
...全文
111 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2017-06-27
  • 打赏
  • 举报
回复
为什么要等待读数据?间歇的去读串口数据缓冲区,读到结束标志或者需要长度,则转入处理数据
Eleven 2017-06-26
  • 打赏
  • 举报
回复
AfxBeginThread创建线程,然后利用PostThreadMessage给线程发送消息,线程中需要有个消息循环来接收GetMessage
枫青痕 2017-06-26
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
一般和下位机通信,都是小块数据,单线程不可能造成假死! 要使用多线程则创建一个通信线程,通信线程在死循环,主线程需要通信时,将数据投递给通信线程,通信线程检查是否是否有数据要处理,有,则处理通信,无,则sleep一段时间
去等待接收数据的时候,软件直接是无反应状态的。
枫青痕 2017-06-26
  • 打赏
  • 举报
回复
引用 3 楼 xiaohuh421 的回复:
把this指针当成线程函数参数传过去啊. 比如有类CMyDlg _beginthreadex(NULL,0,ThreadCall,this,0,NULL); unsigned int WINAP ThreadCall(void *param) { CMyDlg *pDlg = (CMyDlg*)param; pDlg->OnClickBtn();//调用你的按钮的函数. (注意: 线程中不能调用UpdateData函数, 否则必崩溃) retrun 0; } 线程中尽量不要操作UI, 否则容易导致崩溃. 使用消息的方式更新界面是可以的.
谢谢,后面用了传递 枚举值 在通过枚举值判断,我本意是线程调用的函数不能写死,要不没个按钮都得写开线程 会烦死
赵4老师 2017-06-26
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
xiaohuh421 2017-06-26
  • 打赏
  • 举报
回复
把this指针当成线程函数参数传过去啊. 比如有类CMyDlg _beginthreadex(NULL,0,ThreadCall,this,0,NULL); unsigned int WINAP ThreadCall(void *param) { CMyDlg *pDlg = (CMyDlg*)param; pDlg->OnClickBtn();//调用你的按钮的函数. (注意: 线程中不能调用UpdateData函数, 否则必崩溃) retrun 0; } 线程中尽量不要操作UI, 否则容易导致崩溃. 使用消息的方式更新界面是可以的.
worldy 2017-06-26
  • 打赏
  • 举报
回复
一般和下位机通信,都是小块数据,单线程不可能造成假死! 要使用多线程则创建一个通信线程,通信线程在死循环,主线程需要通信时,将数据投递给通信线程,通信线程检查是否是否有数据要处理,有,则处理通信,无,则sleep一段时间

15,473

社区成员

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

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