jjtjjt1234
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2005-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1421回复:6

我的上位机应用程序为什么不能做别的工作?

楼主#
更多 发布于:2004-03-09 20:16
我的任务是用68013做图像数据采集,现图像数据能进入微机,但我的微机程序一开始读图像数据后,就只能做这件事了,其他的菜单都没有反应,甚至窗口不能拖动,不能最大化,我的上位机流程如下图(程序对应“开始采集”菜单),其中判断是否检测到帧信号我用的
方法是:当帧信号产生时,用EP1端口的interrupt 方式送出两个
0XFF,主机用CYPRESS提供的IOCTL_EZUSB_BULK_READ读帧信号是否
到,如读到的不是两个0XFF就再读,当读到的是两个0XFF时,就接着读图像数据,然后显示,结束后再回去判断下一帧信号是否到。

我这样做为什么会使得程序的其他部分没有反应?做到这里被卡住
了,都不知道该学什么,和什么有关?是和多线程有关系吗?
该怎么解决,大家帮帮忙?








jiang
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-10 00:25
从你的流程图来看,你的程序基本上是在死循环。
你或者在循环中加入如下代码。
或者开用多线程。
MSG myMsg;
while(::PeekMessage(&myMsg, NULL, 0, 0, PM_REMOVE))
{
if((WM_PAINT == myMsg.message)||(this->GetSafeHwnd() == myMsg.hwnd)||::IsChild(this->GetSafeHwnd(), myMsg.hwnd))
{
::TranslateMessage(&myMsg);
::DispatchMessage(&myMsg);
}
}
A strong man can save himself. A great man can save another.
jjtjjt1234
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2005-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-10 10:32
:S
jiang
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-10 13:02
否则你的程序怎么可能会有响应呢?
A strong man can save himself. A great man can save another.
jjtjjt1234
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2005-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-10 22:45
    多谢兄弟的指点,但好像用你贴的这段程序,我的程序对它自己的菜单还是不能响应,可能是消息发出后,我的应用程序窗口接收到消息后因一直在循环而无法响应,可能得用多线程了吧!
    如果开个线程,把我得循环放进去,这样应该可以响应我得菜单得其他功能了吧!
    
jiang
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-12 12:52
我的这段代码只能保证响应OnPaint()或OnDraw()。代码中已经体现出来了:
if((WM_PAINT == myMsg.message)||(this->GetSafeHwnd() == myMsg.hwnd)||::IsChild(this->GetSafeHwnd(), myMsg.hwnd))

所以,你在用Alt+Tab切换的时候,它应该能够重画。而你原来的程序应该不能。
如果你要所有的消息。则可以把上面的消息过滤删掉。

好像系统把我的代码转换成表情符号了。

:D
A strong man can save himself. A great man can save another.
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-12 13:05
是不是可以这个样子。
1、你的数据读写都在OnIdle里完成。
2、ReadFile使用Overlap模式。
3、ReadFile后立刻退出。
4、下一次执行OnIdle时,如果ReadFile没有结束立刻退出,如果结束处理数据,然后执行下一个ReadFile。
如此循环。应该可以。当然,程序的效率比较低。
好好学习,天天向上,做一个乖宝宝。
游客

返回顶部