刚学多线程,遇到个小问题~(20分)

  • 主题发起人 主题发起人 logpie
  • 开始时间 开始时间
L

logpie

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
TMythread=class(Tthread)
private
newstr:string;
protected
procedure Execute;override;
Public
constructor Create(ns:string);
end;
var
Form1: TForm1;

implementation

{$R *.dfm}


constructor TMythread.Create(ns:string);
begin
newstr:=ns;
inherited create(false);
end;
procedure Tmythread.Execute ;
begin
FreeonTerminate :=true;
showmessage(newstr);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
tmythread.Create('nnn');

end;
end.

出错:CANVAS DOES NOT ALLOW DRAWING
如把如果我把SHOWMEESAGE(NEWSTR);该成FORM1。CAPTION:=NEWSTR;
标题拦是空的,没有错误信息

怎么回事?
 
在线程里如果调用showmessage来显示的话,确实存在问题,具体怎么实现我也不是太清楚,
好像可以用消息实现
如果第二中方法的话,可以加一句:form1->updata();(我用bcb)
 
update也没用啊
 
不要在线程中用SHOWMESSAGE用MESSAGEBOX比较好,SHOWMESSAGE也是VCL借面,需要保护同步
方法
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
TMythread=class(Tthread)
private
newstr:string;
protected
procedure Execute;override;
procedure method;
Public
constructor Create(ns:string);
end;
var
Form1: TForm1;

implementation

{$R *.dfm}


constructor TMythread.Create(ns:string);
begin
newstr:=ns;
inherited create(false);
end;
procedure Tmythread.Execute ;
begin
FreeonTerminate :=true;
//showmessage(newstr);
self.Synchronize(method);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
tmythread.Create('nnn');

end;
procedure TMythread.method;
begin
showmessage(newstr);
end;

end.
--------------------------------------------------------
测试通过。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
529
import
I
I
回复
0
查看
705
import
I
I
回复
0
查看
785
import
I
I
回复
0
查看
800
import
I
I
回复
0
查看
734
import
I
后退
顶部