标题:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
只看楼主
iswith
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:154
专家分:101
注 册:2013-5-14
得分:0 
吹水佬看看c++的调用实例把这个真正意义的搞定就解决多线,与unicode大问题了。。。。解决的人又不愿意放出来。。。。
2023-03-30 21:39
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:7 
额滴个娘嘞,宏汇编都上了,这话题已不适合在此板块讨论了
2023-03-30 21:42
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
这个问题应该与窗口消息循环没多大关系,消息循环是windows系统的窗口消息机制,也就是接收转发消息的过程。
与窗口过程winpro也只是涉及到窗口子类化有关,可以通过子类化窗口来适应子线程,简单说就是换一个窗口自定义的窗口过程myWinPro。

多线程的应用相对较复杂,要视具体应用情况而定。

通常子线程最好不要去直接操控主线程的UI,否则有可能会存在未知的异常,尤其是多个子线程并发时的问题。
一般都是用异步工作方式,或创建子线程UI(线程子窗口)。
MFC的做法好像也是用两个线程来协同来处理,一个是UI线程(负责UI消息处理),另一个工作线程(负责数据处理)。

个人觉得,VFP实际应用中真正需要多线程的情况不多,VFP本身也就适合中小规模的应用,且32位应用系统能给到进程的资源很有限,多线程有时未必真的那么高效。
可以考虑多进程,操作起来相对简单可靠,运行安全。现在较复杂应用也用多进程,QT好像也不支持创建子线程UI。

2023-03-31 10:08
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用iswith在2023-3-31 10:40:31的发言:

消息循环是windows系统的窗口消息机制  已有一个WinPro,如果我自定义一个MyWinproc 感觉好像也不对!因为我没有在源头创建一个窗体消息处理的的过程 我的这个过程感觉还是在WinPro里面!我试试再创建一个MyWinproc 看能不能解决问题,如果这个问题能解决那就好了!如果不能想办法在应用的入口点想办法!反正我觉得这个有意思!我已经有多线,但没有多线UI这挺操蛋的。。。。。。。。。。。

可以参考Windows子类化窗口的相关文档。
子类化窗口可以对窗口的功能扩展,是windows提供了一种机制,是对窗口消息的重定向。
对照一下Winpro与myWinPro
Winpro

myWinPro
2023-03-31 10:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
对窗口的概念,windows的标准控件大都视为“窗口”,这些所谓的“子窗口”可有窗口过程,也可无窗口过程。
2023-03-31 11:22



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




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

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