| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1382 人关注过本帖
标题:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
取消只看楼主 加入收藏
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册:2013-5-14
结帖率:3.33%
收藏
已结贴  问题点数:20 回复次数:6 
在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 窗体 UI 控制 控件 VFP 
2023-03-30 11:13
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册: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: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册:2013-5-14
收藏
得分:0 
是的没有人会按住鼠标不放,反正线程还在生命周期中,只是被当前窗体线程中某一个动作(SendMessage消息)循环给阻塞,你看C版Win32窗体构造函数就清楚了!我看C#有一个invoke我想学习它,然后VFP就可以这样this.invoke.VFP全部控件.方法属性XX,结果发现这很容易解决,但问题是这个还是在窗体线程循环中。。。我无语了!
2023-03-30 15:29
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册: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: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册:2013-5-14
收藏
得分:0 
吹水佬看看c++的调用实例把这个真正意义的搞定就解决多线,与unicode大问题了。。。。解决的人又不愿意放出来。。。。
2023-03-30 21:39
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册: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: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册:2013-5-14
收藏
得分:0 
消息循环是windows系统的窗口消息机制  已有一个WinPro,如果我自定义一个MyWinproc 感觉好像也不对!因为我没有在源头创建一个窗体消息处理的的过程 我的这个过程感觉还是在WinPro里面!我试试再创建一个MyWinproc 看能不能解决问题,如果这个问题能解决那就好了!如果不能想办法在应用的入口点想办法!反正我觉得这个有意思!我已经有多线,但没有多线UI这挺操蛋的。。。。。。。。。。。

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

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



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

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