| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1379 人关注过本帖
标题:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
只看楼主 加入收藏
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:443
专家分:582
注 册:2013-5-14
收藏
得分:0 
吹水佬看看c++的调用实例把这个真正意义的搞定就解决多线,与unicode大问题了。。。。解决的人又不愿意放出来。。。。
2023-03-30 21:39
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:703
专家分:2780
注 册:2018-3-13
收藏
得分:7 
额滴个娘嘞,宏汇编都上了,这话题已不适合在此板块讨论了

这家伙很懒,啥也没留下
2023-03-30 21:42
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
这个问题应该与窗口消息循环没多大关系,消息循环是windows系统的窗口消息机制,也就是接收转发消息的过程。
与窗口过程winpro也只是涉及到窗口子类化有关,可以通过子类化窗口来适应子线程,简单说就是换一个窗口自定义的窗口过程myWinPro。

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

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

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

2023-03-31 10:08
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册: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
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
对窗口的概念,windows的标准控件大都视为“窗口”,这些所谓的“子窗口”可有窗口过程,也可无窗口过程。
2023-03-31 11:22
快速回复:在多线程上控制VFP窗体UI上的控件有一个问题我一对没有得到解决
数据加载中...
 
   



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

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