标题:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
取消只看楼主
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
结帖率:4.76%
已结贴  问题点数:20 回复次数:6 
在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
搜索更多相关主题的帖子: 窗体 UI 控制 控件 VFP 
2023-03-30 11:13
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册: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
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
得分:0 
是的没有人会按住鼠标不放,反正线程还在生命周期中,只是被当前窗体线程中某一个动作(SendMessage消息)循环给阻塞,你看C版Win32窗体构造函数就清楚了!我看C#有一个invoke我想学习它,然后VFP就可以这样this.invoke.VFP全部控件.方法属性XX,结果发现这很容易解决,但问题是这个还是在窗体线程循环中。。。我无语了!
2023-03-30 15:29
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册: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
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
得分:0 
吹水佬看看c++的调用实例把这个真正意义的搞定就解决多线,与unicode大问题了。。。。解决的人又不愿意放出来。。。。
2023-03-30 21:39
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
得分:0 
Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的while循环使用了GetMessage()这个方法,这是个阻塞方法,也就是队列为空时方法就会被阻塞,
从而这个while循环停止运动,这避免了一个程序把cpu无缘无故地耗尽,让其它程序难以得到响应。
dotnet里面的消息循环
public static void Main(string[] args)
{
   Form f = new Form();
   Application.Run(f);
}

Dotnet窗体程序封装了上述的while循环,这个循环就是通过Application.Run方法启动的。
2023-03-30 22:57
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
得分:0 
消息循环是windows系统的窗口消息机制  已有一个WinPro,如果我自定义一个MyWinproc 感觉好像也不对!因为我没有在源头创建一个窗体消息处理的的过程 我的这个过程感觉还是在WinPro里面!我试试再创建一个MyWinproc 看能不能解决问题,如果这个问题能解决那就好了!如果不能想办法在应用的入口点想办法!反正我觉得这个有意思!我已经有多线,但没有多线UI这挺操蛋的。。。。。。。。。。。

[此贴子已经被作者于2023-3-31 10:44编辑过]

2023-03-31 10:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511731-1-1.html




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

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