| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1468 人关注过本帖
标题:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
只看楼主 加入收藏
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:474
专家分:621
注 册:2013-5-14
结帖率:3.03%
收藏
已结贴  问题点数:20 回复次数:16 
在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 窗体 UI 控制 控件 VFP 
2023-03-30 11:13
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:474
专家分:621
注 册:2013-5-14
收藏
得分:0 
情况如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

c#有Invoke或者BeginInvoke,但VFP窗体我需要重建它的Invoke或者BeginInvoke这难度有点高,VFP太老了!
找不到任何有关窗体线程相关资料!看C的话又很难找到方向!待高手指导一下,因为我是直接在线程操作VFP表单UI控件,主要待解决鼠标按下不放影响,
我觉得鼠标按下不放,应该是SendMessage机制阻塞影的,而我的表单控件又在这个窗体线程大循环里面,实在无法拆分,我应该把窗体建一个像c#一样的委托代理线程在这个窗体线程消息循环之外的


[此贴子已经被作者于2023-3-30 11:29编辑过]

2023-03-30 11:20
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:806
专家分:1231
注 册:2021-10-13
收藏
得分:7 
有点深奥啊。
2023-03-30 12:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:7 
以前好像有贴探讨过类似的问题
测试过程是:VFP主窗口放一个控件显示时钟,子线程定时显示时钟。用鼠标左键按住右上角关闭(X)按钮拖动,看看时钟有无停止。
2023-03-30 13:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用吹水佬在2023-3-30 13:19:36的发言:

以前好像有贴探讨过类似的问题
测试过程是:VFP主窗口放一个控件显示时钟,子线程定时显示时钟。用鼠标左键按住右上角关闭(X)按钮拖动,看看时钟有无停止。

这个应该不是多线程问题,好像是定时器的问题。

2023-03-30 14:18
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用iswith在2023-3-30 11:20:49的发言:

情况如下:

c#有Invoke或者BeginInvoke,但VFP窗体我需要重建它的Invoke或者BeginInvoke这难度有点高,VFP太老了!
找不到任何有关窗体线程相关资料!看C的话又很难找到方向!待高手指导一下,因为我是直接在线程操作VFP表单UI控件,主要待解决鼠标按下不放影响,
我觉得鼠标按下不放,应该是SendMessage机制阻塞影的,而我的表单控件又在这个窗体线程大循环里面,实在无法拆分,我应该把窗体建一个像c#一样的委托代理线程在这个窗体线程消息循环之外的

可能是鼠标消息优先级较高,到了VFP主线程层面就不由子线程说了算。
SendMessage只是同步消息,就算改用PostMessage情况应该也差不多。

2023-03-30 14:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
这个应该不是什么问题,谁会闲得无事按住鼠标不放,除非发生了意外。
2023-03-30 15:02
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:474
专家分:621
注 册:2013-5-14
收藏
得分:0 
是的没有人会按住鼠标不放,反正线程还在生命周期中,只是被当前窗体线程中某一个动作(SendMessage消息)循环给阻塞,你看C版Win32窗体构造函数就清楚了!我看C#有一个invoke我想学习它,然后VFP就可以这样this.invoke.VFP全部控件.方法属性XX,结果发现这很容易解决,但问题是这个还是在窗体线程循环中。。。我无语了!
2023-03-30 15:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用iswith在2023-3-30 15:29:32的发言:

是的没有人会按住鼠标不放,反正线程还在生命周期中,只是被当前窗体线程中某一个动作(SendMessage消息)循环给阻塞,你看C版Win32窗体构造函数就清楚了!我看C#有一个invoke我想学习它,然后VFP就可以这样this.invoke.VFP全部控件.方法属性XX,结果发现这很容易解决,但问题是这个还是在窗体线程循环中。。。我无语了!


windows都是用消息机制,COM编程用接口invoke方法调用COM对象。
只要与窗口打交道都脱不了与消息的关系,窗口过程和消息循环就说明了。
2023-03-30 16:45
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:474
专家分:621
注 册:2013-5-14
收藏
得分:0 
;********************************************************************
; 消息循环
;********************************************************************
        .while    TRUE
            invoke    GetMessage,addr @stMsg,NULL,0,0
            .break    .if eax    == 0
            invoke    TranslateMessage,addr @stMsg
            invoke    DispatchMessage,addr @stMsg
        .endw
        ret
调MFC ,重写窗体消息,不紧可以解决窗体多线问题还可以解决Unicode问题,需要功能深厚的大佬了。。。。

[此贴子已经被作者于2023-3-30 21:33编辑过]

2023-03-30 21:13
快速回复:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023440 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved