一个线程消息发送的问题,线程释放时怎么没有响应 请刘麻子,lichengbin等高手相助(100分)

  • 主题发起人 主题发起人 xgwzw
  • 开始时间 开始时间
X

xgwzw

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FormShow(Sender: TObject);
begin
MgrThread := TSvrManager.Create(True);
end;
//当我按下btn1后没有响应,怎么解决啊
procedure TForm1.btn1Click(Sender: TObject);
begin
PostThreadMessage(MgrThread.ThreadID, WM_QUIT, 0,0);
//MgrThread.WaitFor;
waitForSingleObject(MgrThread.Handle,Infinite);
MgrThread.Free;
MgrThread:= nil;
ShowMessage('finish!');
end;
 
我的线程产生后,没有让他resume,然后发消息 让他停掉,怎么出现窗体不响应呢?
请各位大侠指点
 
你的TSvrManager类是怎么定义
在线程函数执行完毕后有没有释放句柄啊
 
procedure TSvrManager.Execute;
var
MsgRec : TMsg;
f:tlog;
begin
ThreadStart;
while GetMessage(MsgRec, 0, 0, 0)do
begin
TranslateMessage(MsgRec);
DispatchMessage(MsgRec);
end;
ThreadStop;
end;
 
我这样是正确的
procedure Tmythread.execute;
begin
inherited;
while not Terminateddo
begin
if form1.Edit1.Text='1' then
form1.Edit1.Text:='2'
else
form1.Edit1.Text:='1';
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
PostThreadMessage(mythread.ThreadID, WM_QUIT, 0,0);
//MgrThread.WaitFor;
//waitForSingleObject(mythread.Handle,Infinite);
mythread.Free;
mythread:= nil;
ShowMessage('finish!');
end;
 
邀请所有的delphi fans 在此笔记上发表线程经验
http://www.delphibbs.com/keylife/iblog_show.asp?xid=19798
 
to Mike1234567890
我线程函数写出来了
看看有什么问题
 
procedure TSvrManager.Execute;
var
MsgRec : TMsg;
f:tlog;
begin
ThreadStart;
while GetMessage(MsgRec, 0, 0, 0)do
begin
TranslateMessage(MsgRec);
DispatchMessage(MsgRec);
end;
ThreadStop;
end;
改一下
procedure TSvrManager.Execute;
var
MsgRec : TMsg;
f:tlog;
begin
ThreadStart;
FreeOnTerminate:=true;
while not Terminated do
begin
GetMessage(MsgRec, 0, 0, 0);
if MsgRec.Message = WM_QUIT then
break;
TranslateMessage(MsgRec);
DispatchMessage(MsgRec);
end;
ThreadStop;
end;

改成这样试试
 
to Mike1234567890
MgrThread := TSvrManager.Create(True);
线程产生时,没有启动,释放线程还是没有响应
难道是线程挂起后,収不到消息吗
 
GetMessage(MsgRec, 0, 0, 0);
if MsgRec.Message = WM_QUIT then
break;
TranslateMessage(MsgRec);
DispatchMessage(MsgRec);
这样写,挂起肯定收不到的啊
 
to sbzldlb
当一个线程挂起后,不能收到消息吗?
那不是在退出线程前,要判断使之resume
 
线程挂起之后,是不接受任何输入和执行代码的
我这样试过是可以的:
procedure TSvrManager.Execute;
var
MsgRec: TMsg;
begin
ThreadStart;
while GetMessage(MsgRec, 0, 0, 0)do
begin
TranslateMessage(MsgRec);
DispatchMessage(MsgRec);
end;
ThreadStop;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
MgrThread := TSvrManager.Create(True);
MgrThread.Resume;////////
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
PostThreadMessage(MgrThread.ThreadID, WM_QUIT, 0,0);
//MgrThread.WaitFor;
WaitForSingleObject(MgrThread.Handle,Infinite);
MgrThread.Free;
MgrThread:= nil;
ShowMessage('finish!');
end;
 
帮顶!
http://www.source520.com
站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载
http://www.source520.com/search/search.asp
"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
多人接受答案了。
 
后退
顶部