100求简单多线程问题(100分)

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

dira

Unregistered / Unconfirmed
GUEST, unregistred user!
在主窗体中创建子窗体,并ShowModal,在子窗体中用多线程发送消息,由于子窗体会释放造成多线程失败,如何解决??
 
把线程独立不行吗?
不要让它依赖子窗体
 
>>由于子窗体会释放造成多线程失败
在子窗體 close 時通知線程, 線程判斷一個標志, 如果有, 才控制子窗體
或 free 線程不行嗎??
 
Highpeak:
请详解线程独立是什么意思
 
你可以单独创建一个线程单元,创建※撤销控制好,什么时候创建,什么时候撤销自己根据实际要求决定,至于技术问题查相关资料。
 
我的意思同上。就是把线程独立出来啊。
 
你要是象那样
就不能依赖窗体
要是同步 也达不到你想要的效果
就是尽量独立出来
在什么时间创建和撤销 是关键
 
线程最好不要和窗口绑在一起,从TThread继承单建一个线程类,在线程的Excute过程中(一般都有循环代码)要检查结束标记,一旦达到结束条件应该马上中止循环,这样线程就可以安全的退出了。
 
你可以这样解决。如果你一定要在你的线程依靠子窗体的,你可以在子窗体关闭时,关闭线程的。
//建线程
var
Fhandle: Thandle;
sid: Cardinal;
Fhandle := begin
Thread(nil,0,StcCallbackproc1,Self,0,sid);
//退出时关闭你所开的线程
if Fhandle <> 0 then
begin
if WAIT_TIMEOUT = WaitForSingleObject(Fhandle,1000) then
TerminateThread(Fhandle, 0);
CloseHandle(Fhandle);
end;
请给分.
 
如果不用API的话,那是不是要设置一个全局变量,在窗体关闭时通知线程关闭
或者直接关闭线程?
 
发表者就这么多积分吗??
多线程想和窗口绑定,是不是也太随心所欲了,
见过java参考里头java以及
vcl元件不一定是线程安全的,
所以多线程作后台不行吗?
 
分不够可以再加,vcl元件不一定是线程安全的,可是我在调用VCL时已经用了Synchronize
 
方法1:在子窗口释放时先释放线程
Tthread.Terminate;
Tthread.waitfor;
TMDIForm.free;
方法2:线程另外建立,子窗口释放时通知线程Terminate;
Tthread.Execute;
begin

if (not Terminated) and (TMDIForm.handle <> nil) then
begin
......
end else
begin
Terminate;
......
end;
end;
end;
 
谢谢,结帐了
 
多人接受答案了。
 
后退
顶部