初学的Dephi才三天,低级问题求教!请帮忙。 (10分)

  • 主题发起人 主题发起人 e_jie
  • 开始时间 开始时间
E

e_jie

Unregistered / Unconfirmed
GUEST, unregistred user!
在主线程里创建了一个工作线程,请问:
线程在执行完毕后如何返回值给主线程(不使用全局变量)
就像函数的返回值一样。
 
线程执行完成就结束了,不存在了!如果你需要让主线程知道线程已经结束运行,除了使用
全局变量(你反对这样做)外,可以通过消息通知啊,如:SendMessage/PostMessage
 
谢谢,可以再具体一点吗?
 
发送什么类型的message?
 
自己定一一个message啊,例如WM_MYMES = WM_USER + 1001;
线程可以发sendmessage(mainform.handle,WM_MYMES,1234,5678);
主线程可以处理这个消息
 
具体消息你自己定义,demo如下:
const
WM_MyMessage = WM_USER + 1;

TMyThread = class(TThread)
private
FWindHandle : THandle
...
protected
procedure Execute;
override;
..
end;

procedure TMyThread.Execute;
begin
while not Terminateddo
begin
...//procced with ur logic
...
end;
//Task terminated;
SendMessage(FWindHandle ,WM_MyMessage, 0,0);

PostMessage(FWindHandle ,WM_MyMessage, 0,0);

end;

当然在你的希望收到消息的窗口需要处理此消息(WM_MyMessage)
如:
在你的form中定义如下:
TForm1 = class(TForm)
...
private
procedure MyMessage(var Message : TMessage);
message WM_MyMessage;
...
end;

procedure TForm1.MyMessage(var Message : TMessage);
begin
...
showmessage('my thread end');
end;

不知道还有什么疑问?明天和后天公司要出去秋游,^_^,周一再回你。
 
LLLYJ:
这个自定义消息只能让主线程知道线程结束。
例如
NewThread:=socketthread.Create(ip,port, Tmemo_msg.text,packs);
这个线程发包给指定的socket Server.
假设Server端返回了包给这个线程,线程准备结束。
我希望线程能返回包文给主线程,这时主线程能立即处理这个包(分析,或做一些事情)。
而不只是知道它结束!
谢谢!

 
TThread.ReturnValue
Specifies the value returned to other waiting threads when the thread finishes executing.
property ReturnValue: Integer
Description
Use ReturnValue to indicate success/failure or numeric result/output of the thread to the
application or other threads. The WaitFor method returns the value stored in ReturnValue.
~~~~~~~~~~~~~~~~~~
procedure TThd1.Execute;
begin
while not Terminateddo
;
Self.ReturnValue:=12;
//
end;

procedure TForm1.Button7Click(Sender: TObject);
var
Thd1:TThd1;
begin
Thd1:=TThd1.Create(false);
Thd1.Terminate;
Caption:=IntToStr(Thd1.WaitFor);
//
end;

搞定!
 
我需要的返回值不是integer ,是一个字符串!
 
请看你自己提的另一个问题。
另:有必要用 "!" 吗??
 
呵呵!又是这种问题!
我用NMUDP控件!相当简单,而且效果不错,也不是太繁!
 
强制结束 都2002年了
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部