多线程waitforsingleobject闪退问题

caizequn 2017-11-13 01:52:34
各位大神,小弟现在在做一个项目,用MFC写的程序,用到waitforsingleobject函数来等待事件触发,我这边直接将waitforsingleobject放在自己建立的线程里面执行没有问题,如果我把waitforsingleobjec函数放在自己创建的函数内,再到线程内调用该函数,执行到waitforsingleobjec就出出现界面闪退,麻烦各位大神给小弟点意见!不胜感激。
...全文
434 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2017-11-14
  • 打赏
  • 举报
回复
WaitForSingleObject 前设置断点,查看所有参数是否有效?
赵4老师 2017-11-14
  • 打赏
  • 举报
回复
《Windows核心编程》
caizequn 2017-11-13
  • 打赏
  • 举报
回复
引用 7 楼 caizequn 的回复:
[quote=引用 6 楼 zgl7903 的回复:] 估计是 m_pmf 指针有问题, 建议全局或作为线程参数传入 CMainFrame *m_pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT(m_pmf);
好的,我试试!谢谢[/quote] 试了之后,还是一样啊!
caizequn 2017-11-13
  • 打赏
  • 举报
回复
引用 6 楼 zgl7903 的回复:
估计是 m_pmf 指针有问题, 建议全局或作为线程参数传入 CMainFrame *m_pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT(m_pmf);
好的,我试试!谢谢
zgl7903 2017-11-13
  • 打赏
  • 举报
回复
估计是 m_pmf 指针有问题, 建议全局或作为线程参数传入 CMainFrame *m_pmf = (CMainFrame*)AfxGetMainWnd(); ASSERT(m_pmf);
caizequn 2017-11-13
  • 打赏
  • 举报
回复
引用 4 楼 caizequn 的回复:
[quote=引用 3 楼 kuangbao9 的回复:] 能看看你waitforsingleobject前后代码吗?
BOOL JN_MotorControl::Motor_Forward(void) { CMainFrame *m_pmf = (CMainFrame*)AfxGetMainWnd(); if (FALSE == Motor_EMGButton()) return FALSE; if (FALSE == Motor_Mode()) return FALSE; m_MachineState = "电机连续正行"; MotorParameter MotorParam_Struct; MotorParam_Struct.vel = 15; //轴速度 速度正负决定电机的方向 MotorParam_Struct.macc = 4; //轴加速度 m_JN_MotorCard.AxisRunV(AxisNum, MotorParam_Struct.vel, MotorParam_Struct.macc); Sleep(50); m_CheckStatus = TRUE; m_pmf->p_JN_StatusDisplay->m_MotorStatus = MS_PositiveLimit; if (WaitForSingleObject(m_pmf->p_JN_StatusDisplay->m_MotorStatusEvent->m_hObject, INFINITE) == WAIT_OBJECT_0) { } return TRUE; } [/quote]把这个程序放在线程内直接执行是没有问题的,如果线程内直接调用该函数,就出现闪退。
caizequn 2017-11-13
  • 打赏
  • 举报
回复
引用 3 楼 kuangbao9 的回复:
能看看你waitforsingleobject前后代码吗?
BOOL JN_MotorControl::Motor_Forward(void) { CMainFrame *m_pmf = (CMainFrame*)AfxGetMainWnd(); if (FALSE == Motor_EMGButton()) return FALSE; if (FALSE == Motor_Mode()) return FALSE; m_MachineState = "电机连续正行"; MotorParameter MotorParam_Struct; MotorParam_Struct.vel = 15; //轴速度 速度正负决定电机的方向 MotorParam_Struct.macc = 4; //轴加速度 m_JN_MotorCard.AxisRunV(AxisNum, MotorParam_Struct.vel, MotorParam_Struct.macc); Sleep(50); m_CheckStatus = TRUE; m_pmf->p_JN_StatusDisplay->m_MotorStatus = MS_PositiveLimit; if (WaitForSingleObject(m_pmf->p_JN_StatusDisplay->m_MotorStatusEvent->m_hObject, INFINITE) == WAIT_OBJECT_0) { } return TRUE; }
kuangbao9 2017-11-13
  • 打赏
  • 举报
回复
能看看你waitforsingleobject前后代码吗?
caizequn 2017-11-13
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
waitforsingleobject要放到单独的线程,不能放到主线程中
我是放在单独的线程中,只是我自己先写了一个函数,先把他放在函数里面,然后再到自己写的线程中去调用这个函数。
oyljerry 2017-11-13
  • 打赏
  • 举报
回复
waitforsingleobject要放到单独的线程,不能放到主线程中

15,471

社区成员

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

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