各位各位,帮忙进来看看这个线程的问题!!!!!!!!!!!!!!!!!!!!!
代码没有写完全:
type
TTestThread = class(TThread);
private:
Answer: integer;
protected:
procedure GiveAnswer;
procedure Execute; override;
end;
...
procedure TTestThread.GiveAnswer;
begin
MianForm.Edit1.Text:=IntToStr(Answer);
end;
procedure TTestThread.Execute;
var
i:integer;
begin
FreeOnTerminate := Trure;
....
GiveAnswer;//问题出在这里
...
end;
为什么可以直接调用GiveAnswer!!!!!!!!!!
不是应该这样吗:Synchronize(GiveAnswer);
我知道Synchronize的作用是在主线程中执行一个方法,
但为何GiveAnswer可以直接调用呢?????????
谢谢
问题点数:50、回复次数:4Top
1 楼windindance(风舞轻扬·白首为功名)回复于 2002-03-18 22:53:40 得分 20
因为在DELPHI中,子线程不能直接操作VCL.
调用Synchronize可以保证不会有线程冲突。
直接调用GiveAnswer是可以,但当程序复杂时,会有问题。Top
2 楼weizhi(行者)回复于 2002-03-19 20:16:34 得分 10
呵呵,同意楼上!
Synchronize是将方法交由主线程(UI线程)执行的!如果你的线程方法涉及到界面操作,那是一定要用Synchronize函数的,但Delphi并不检测你是否用了,所以你不用也可以编译运行,但,当多个线程同时执行时,多半是要出问题的
如果你的线程方法没有界面操作,可以不用Synchronize()函数Top
3 楼torble(阿裕)回复于 2002-03-19 20:38:49 得分 10
线程同步问题,Synchronize 喽,或者自己处理同步措施Top
4 楼smhpnuaa(天将降大任于斯人也!)回复于 2002-03-19 21:33:21 得分 10
这可是基础问题啊!多看看书啊!Top




