社区
Windows SDK/API
帖子详情
窗体、线程、消息(题目不知道怎么说,大家进来看看吧)
YaYiYaO
2006-05-26 10:51:01
能否在主线程阻塞的情况下,用另外一个线程创建一个窗口,并且能处理窗体消息,响应用户的操作??
...全文
249
14
打赏
收藏
窗体、线程、消息(题目不知道怎么说,大家进来看看吧)
能否在主线程阻塞的情况下,用另外一个线程创建一个窗口,并且能处理窗体消息,响应用户的操作??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
YaYiYaO
2006-05-29
打赏
举报
回复
to wen_zang(文臧):
不要灌水,说些有建设性的话
up!!!!!!!
Kingron
2006-05-28
打赏
举报
回复
其实同步可以指定窗口的线程的,这样可以使用另外的消息线程来处理消息。要求就是在线程中创建窗体即可,则该动态创建的窗体可以和主线程消息队列无关。
智能大石头
2006-05-28
打赏
举报
回复
在主线程不阻塞的情况下,我花了两个月时间,终于让子线程里面的窗体独立工作,有意知道的请到QQ群里讨论 群号 5197351
comanche
2006-05-28
打赏
举报
回复
个人觉得没什么办法, 主线要是阻在 vcl 上, 就会进入一个 vcl 全局锁, delphi 3 之前没这个锁, delphi4 也是要求用 thread.Synchronize, 到了 delphi5 以上版本似乎不管有没有 thread.Synchronize 就会进入 vcl 全局锁
wen_zang
2006-05-28
打赏
举报
回复
在循环中多使用
Application.ProcessMessages;
一般不会是进程堵塞的
YaYiYaO
2006-05-28
打赏
举报
回复
to Kingron(单身走我路……):
在线程中创建窗体,我也试过,创建窗体后调用Form.Show,就阻塞了,根本执行不到下面的消息循环中去
YaYiYaO
2006-05-27
打赏
举报
回复
似乎也不可以哎,线程调用GetMessage()就阻塞了
消息和线程有关系的吗,是不是消息都发给创建窗体的那个线程的呢?
comanche
2006-05-26
打赏
举报
回复
是吧, 这个问题复杂, 主线是被 vcl 阻塞的偶也没办法, 对不住哈
YaYiYaO
2006-05-26
打赏
举报
回复
to comanche(太可怕):
你有没有试过啊,我在提这个问题之前就试过这样做,没有用的。
comanche
2006-05-26
打赏
举报
回复
可以 线程体没内容, 下面是简单做法, 主线程就是一直在干这样的事的
procedure Execute;
begin
while not Termianted then
begin
Sleep(50);
Application.ProcessMessages;
end;
end;
看
procedure TApplication.Run;
begin
FRunning := True;
try
AddExitProc(DoneApplication);
if FMainForm <> nil then
begin
case CmdShow of
SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
end;
if FShowMainForm then
if FMainForm.FWindowState = wsMinimized then
Minimize else
FMainForm.Visible := True;
repeat
try
// 这句
HandleMessage;
except
HandleException(Self);
end;
until Terminated;
end;
finally
FRunning := False;
end;
end;
procedure TApplication.HandleMessage;
var
Msg: TMsg;
begin
if not ProcessMessage(Msg) then Idle(Msg);
end;
YaYiYaO
2006-05-26
打赏
举报
回复
消息一定是主线程的吗?
我前段时间用一个线程(不是主线程)调用ttimer,发现不会触发ontimer事件,后来查了msdn关于WM_TIMER消息,上面是这么说的:
“The WM_TIMER message is posted to the installing thread's message queue when a timer expires.”
这是不是说明消息不一定是由主线程处理的呢
这里我们不讨论结构问题,这个情况太多了。这里讨论这个能否实现。
KL2
2006-05-26
打赏
举报
回复
不行吧,窗体消息是主线程的。
设计也有问题,主线程不应该被阻塞,一些繁重的工作应该交给另外的线程。
bomdy
2006-05-26
打赏
举报
回复
给线程建立消息循环应该就可以了的,我在VC下这样用过,不过没在delphi中这样用过
GetMessage()
TranslateMessage()
DispatchMessage()
YaYiYaO
2006-05-26
打赏
举报
回复
哦,没有关系的,大家只是讨论讨论
难道真的就不行了吗??
Python Tkinter
窗体
讲解
Python作为自立门户的语言,除了学习它的基础编程之外,它还提供了
窗体
的学习,这样相对来
说
,它就完整了,如果大家学习过C#
窗体
实现或者Java,MFC等等吧,再学习它就会简单的多。当然大家也不用担心,即使没学过,...
C#
窗体
Winform,如何实现实时的UI更新效果
文章开始之前,先看下实时更新界面,以便大家理解
题目
的意思: 如上图,是一张Winform
窗体
界面的实时更新图,那么如何实现这种效果呢? 一、解答 这里其实是
线程
的运用。 您不一定需要真正的懂得多
线程
的...
实验五:
线程
编程实验
1.理解
线程
环境、
线程
的生命周期, 2.理解
线程
同步,掌握内核函数的基本用法。 3.支撑网络空间安全专业的专业核心能力、综合创新能力。 二【实验要求】 以下每个实验均要求: 1.“实验源代码”处:粘贴所编写的程序...
C# 详细的多
线程
和
线程
同步学习总结
正在运行的应用程序被视为进程,进程可以有多个
线程
。 进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式), 一个进程运行的失败也不会影响其他进程的运行,Windows系统...
线程
间操作无效: 从不是创建控件的
线程
访问它。
题目
:在form
窗体
中有一个按钮和一个lable。点击按钮创建一个新的
线程
更新lable的值 1 private void button1_Click(object sender, EventArgs e) 2 { 3 //报错:从不是创建控件的
线程
访问它 4 Thread t = ...
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章