多线程采集处理显示图片的问题,求助

mediation 2017-08-23 02:31:50
加精
主界面启动工作线程去采集处理图像,一个线程采集,一个线程处理,处理的这个线程在处理完后postmessage把需要显示的处理结果显示到主界面上;
这里出现一个偶发的问题,连续不停间隔100ms采集处理显示一次的情况下,不清楚是采集中断还是处理中断,还是Postmessage消息阻塞了,主界面画面会停止更新
但是主界面上的所有按键还是可以操作,主界面没有死.
求助可能出现的问题,以及解决办法,
多谢各位大神了



...全文
4421 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn987q 2017-09-14
  • 打赏
  • 举报
回复
1111111111111111111111111111
Cyclone_cq 2017-09-12
  • 打赏
  • 举报
回复
学习了.谢谢楼主
qq_39758938 2017-09-05
  • 打赏
  • 举报
回复
初来乍到,围观大神
weixin_38786036 2017-08-28
  • 打赏
  • 举报
回复
学习了!赞赞赞
mediation 2017-08-28
  • 打赏
  • 举报
回复
引用 31 楼 draculamx 的回复:
"if (!KeyImgList.IsEmpty())" 判断链表是否为空 凡是涉及到链表的操作,全部进入临界区,不要放在临界区外面
已经修改,测试中,多谢大家帮忙
cattpon 2017-08-28
  • 打赏
  • 举报
回复
learning~
yumiko_csdn 2017-08-28
  • 打赏
  • 举报
回复
Postmessage消息阻塞了,主界面画面会停止更新
  • 打赏
  • 举报
回复
最简单的,在PostMessage之后调用GetLastError,如果不是0,把值写到日志里。当你界面不更新时,你打开日志,看有没有记录
draculamx 2017-08-27
  • 打赏
  • 举报
回复
"if (!KeyImgList.IsEmpty())" 判断链表是否为空 凡是涉及到链表的操作,全部进入临界区,不要放在临界区外面
hugh_z 2017-08-27
  • 打赏
  • 举报
回复
学习了.谢谢楼主
cattpon 2017-08-27
  • 打赏
  • 举报
回复
learning
qq_36764313 2017-08-26
  • 打赏
  • 举报
回复
绑定啊啊啊啊啊啊啊啊
最燃系坚果 2017-08-26
  • 打赏
  • 举报
回复
666666
mediation 2017-08-26
  • 打赏
  • 举报
回复
引用 25 楼 draculamx 的回复:
//你的图像处理线程中的临界区代码如下: EnterCriticalSection(&pDlg->KeynewImageMutex); keyimgprocess.Image = KeyImgList.GetHead(); KeyImgList.RemoveHead(); ResetEvent(pDlg->KeynewImageEvent); LeaveCriticalSection(&pDlg->KeynewImageMutex); keyimgprocess.Image = KeyImgList.GetHead(); 取出链表的第一个节点。 请问,你在去取这个头节点的时候,判断它是否为空了吗??? keyimgprocess.Image = KeyImgList.GetHead(); keyimgprocess.Image取出来以后,判断它是否是一个有效的指针了吗?? 我估计问题就出在这里。。。。
9楼的程序里已经有对list是否为空进行判断了吧,取的时候我加一下判断试试
qq_23342295 2017-08-26
  • 打赏
  • 举报
回复
这里出现一个偶发的问题,连续不停间隔100ms采集处理显示一次的情况下,不清楚是采集中断还是处理中断,还是Postmessage消息阻塞了,主界面画面会停止更新 但是主界面上的所有按键还是可以操作,主界面没有死. 求助可能出现的问题,以及解决办法, 多谢各位大神了
mediation 2017-08-25
  • 打赏
  • 举报
回复
引用 15 楼 sichuanpb 的回复:
SendMessage
sendmessage好像有可能导致消息阻塞导致使用sendmessage的线程卡死?
mediation 2017-08-25
  • 打赏
  • 举报
回复
引用 14 楼 cutmelon 的回复:
大概其看了眼代码,应该是两个线程的锁使用问题,在判断KeyImgList的Size()和Empty()之前就要加锁
我加锁试一下,不知道测试多久算成功,或者有什么判定方法就是这个没加锁导致的问题呢?
sichuanwww 2017-08-25
  • 打赏
  • 举报
回复
SendMessage
draculamx 2017-08-25
  • 打赏
  • 举报
回复
每一次读取链表节点之前,删除链表节点之前,都要判断链表是否为空,如果为空,你去取,取出来的是什么?要么是空指针,要么是个随机值
draculamx 2017-08-25
  • 打赏
  • 举报
回复
//你的图像处理线程中的临界区代码如下: EnterCriticalSection(&pDlg->KeynewImageMutex); keyimgprocess.Image = KeyImgList.GetHead(); KeyImgList.RemoveHead(); ResetEvent(pDlg->KeynewImageEvent); LeaveCriticalSection(&pDlg->KeynewImageMutex); keyimgprocess.Image = KeyImgList.GetHead(); 取出链表的第一个节点。 请问,你在去取这个头节点的时候,判断它是否为空了吗??? keyimgprocess.Image = KeyImgList.GetHead(); keyimgprocess.Image取出来以后,判断它是否是一个有效的指针了吗?? 我估计问题就出在这里。。。。
加载更多回复(21)

15,471

社区成员

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

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