4911|12

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

按钮无法响应 [复制链接]

本人用vs2005+wm6 pro sdk开发一个程序,
程序开始运算前,一切正常
在开始后台处理后,由于运算量较大,程序对按钮单击这些事件都不响应了
通常在windows平台上都可以通过类似以下的代码可以解决的,但是在windows mobile上似乎不行

if ( PeekMessage(&msg, NULL, NULL,NULL, PM_REMOVE))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }

不知道有什么解决办法没有

最新回复

if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )                 {                     TranslateMessage( &msg );                     DispatchMessage( &msg );                 } 在mobile下用处似乎不大 使用多线程解决  详情 回复 发表于 2009-10-14 19:13
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
运算代码是否在另一个线程中进行?如果不是试下线程应该没问题,线程中加sleep()
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不要再界面的消息处理中做复杂的操作,还是另启动线程处里吧
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 xunjingzhpu 的回复:
运算代码是否在另一个线程中进行?如果不是试下线程应该没问题,线程中加sleep()

1, 先别这样麻烦吧
2, LZ跟下,看在执行哪部分会这么长延时?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
是这样的,界面只有一个按钮
点一次开始运算,再点一次就停止运算
问题是点了一次开始后,就无法点停止了
不方便使用多线程
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
你点一次程序就开始运算,你在点一次不还是发同样的运算消息,也就是说又启动一次运算?
能否给大家讲讲你是如何让计算机分清这两次点击的关系?  另外可能你的程序进入死循环?
不方便用多线程,加一个停止按钮,杀死这个线程,呵呵。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
点一次开始,再点一次就是关闭,这个程序中当然是有区分
这和加不加按钮没有关系
问题运算开始后,界面就死掉了,不再响应外部输入
程序并没有死掉
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

8
 
一开始没问题,运算量大了才有问题
是不是运算将内存都占用了引起卡机了?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 6 楼 billy145533 的回复:
点一次开始,再点一次就是关闭,这个程序中当然是有区分
这和加不加按钮没有关系
问题运算开始后,界面就死掉了,不再响应外部输入
程序并没有死掉


你说的界面“死掉”可能是运算大也可能是你的程序有问题。让你加个按钮目的是终止这个正在运行的线程。不用多线程,老想界面和后台都在一个线程里还不出现那样的情况,貌似不可能的。
你所说那  
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
应该可以用的,有人在mobile用过了。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 jgj58 的回复:
引用 6 楼 billy145533 的回复:
点一次开始,再点一次就是关闭,这个程序中当然是有区分
这和加不加按钮没有关系
问题运算开始后,界面就死掉了,不再响应外部输入
程序并没有死掉


你说的界面“死掉”可能是运算大也可能是你的程序有问题。让你加个按钮目的是终止这个正在运行的线程。不用多线程,老想界面和后台都在一个线程里还不出现那样的情况,貌似不可能的。
你所说那?
? ? ? ? ? ? ? ? if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? TranslateMessage( &msg );
? ? ? ? ? ? ? ? ? ? DispatchMessage( &msg );
? ? ? ? ? ? ? ? }
应该可以用的,有人在mobile用过了。

说得对,多线程就能解决的问题搞那么复杂干嘛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
可能是运算量过大,卡住了。
另建线程,让OS来切换,比较可靠一些。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
可能是内存不够!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
在mobile下用处似乎不大
使用多线程解决
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表