MessageBox和多线程有关吗?(200分)

  • 主题发起人 主题发起人 dolphinji
  • 开始时间 开始时间
D

dolphinji

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中用了一个MDIForm窗口和一个MDIChild窗口,还有4个线程做数据采集,线程是一直在运行的。
MessageBox是由MDIChild窗口中的按钮发起的。
现在的问题是,有时候执行到MessageBox时,不能弹出对话框,程序死掉了一般。此时跟踪线程,线程还是在运转的。是线程过于繁忙了占用了资源?
这种情况不确定在什么情况下发生。一旦出现这种情况,重启机器重启程序都不管用,但过一段时间自己又恢复正常了。
当然,不启动线程时MessageBox总没问题的。
不知道问题出在哪里?有人遇到过吗?
采集线程是从主窗口启动的:
TTest0Thread:=Test0Thread.create;
//启动线程
TTest0Thread.Priority:=tpIdle ;
TTest0Thread.Resume;
线程中:
constructor Test0Thread.Create;
begin
FreeOnTerminate:=true;
//当线程中断时,TThread 类自动释放
inherited Create(true);
end;
 
VCL 是非线程安全的!
 
对话框不是从线程中弹出的,是MDIChild窗口中的某个按钮事件中的
 
你是在调试状态死掉的吧?如果是在运行期,messagebox和thread应该没关系的
 
是在运行期
 
VCL 是非线程的吗??
 
在非主线程中使用MessageBox的时候可以synchronize(MessageBox...),这样应该不会有问题,但是不能用MessageBox返回参数。
 
大多数和界面相关的API都不是线程安全的!
大多数和界面相关的VCL代码都不是线程安全的!
Delphi的MessageBox只是简单封装了API,没有增加线程安全的机制,所以会有问题。
而且MessageBox是模态窗口,如果两个线程同时都要弹出这个窗口,肯定会有问题。
 
要同步一下,
 
后退
顶部