一个线程的问题,大家帮帮我!!!火烧屁股了(先给50,到时再加)(50分)

  • 主题发起人 主题发起人 天真
  • 开始时间 开始时间

天真

Unregistered / Unconfirmed
GUEST, unregistred user!
在线程类中为什么会这样?
form1.StatusBar1.Panels[1].text:='1';写这句不出借
用下面这句出现未知错误!!!!:《
form1.StatusBar1.Panels[1].text:=inttostr(strtoint(form1.StatusBar1.Panels[2].text)+1);
 
你的这个错误不成立
 
会不会是线程同步问题?
除了TFont,TPen,TBrush,TBitmap,TmetaFile,Ticon其他的vcl控件似乎都不是
线程安全的。
用synchronize()试验一下吧。
 
什么是未知错误啊?
说出来看看?
看样子,不就是inttostr、strtoint的问题了?
在这句话之前,可能panel[2]还没有赋值吧?
 
如果什么都不行的话就只有用synchronize()试试啦。。
 
synchronize
这个函数里面的过程不能调用参数怎么解决?》
synchronize(test(mygod));
这样是错的
 
吧你的部分代码铁出来看看
 
支持啊,,怎么不支持,你在你的线程序类里的PUBLIC声明一个MYGOD的过程
synchronize就可以synchronize(self.mygod)啦。。。
 
是啊。访问VCL要有线程的安全保护才行啊。
 
form1.StatusBar1.Panels[1].text:=inttostr(strtoint(form1.StatusBar1.Panels[2].text)+1);
后面的转换很有可能出错,你换成:=inttostr(strtoint('2')+1)看会不会出错
 
synchronize
这个函数里面的过程不能调用参数怎么解决?》
synchronize(test(mygod));
这样是错的
我是说这人
TEST是函数,
MYGOD是参数!
 
Synchronize的函數是沒有參數的,
可以你可以透過定義在Thread中的成員, 來傳遞參數

TMyThread = class(TThread)
private
FSyncParam1: integer;
procedure SyncMethod;
protected
procedure Execute;
override;
end;

implementation
procedure TMyThread.Execute;
begin
FSyncParam1 := 1;
Synchronize(SyncMethod);
FSyncParam1 := 2;
Synchronize(SyncMethod);
end;

procedure TMyThread.SyncMethod;
begin
case FSyncParam1 of
0: ...
1: ...
2: ...
end;
end;
 
哎,都说了。
 
建议:
1、线程的中使用PostMessage能解决很多问题,它所需要的句柄参数可以在线程的构造函数中传人;
2、最好用StrToIntDef函数来代替strtoint函数。
 
delphi目录下有个/demo/thread
的demo,里面有vcl对象在现程中的使用.跟楼上讲的差不多,
对于要传送的参数定义为线程类的私有变量,然后写个不带参数的syncmethord,
具体参数参考全局私有变量,然后sycnronize(syncmethord)
刚回家,才发现有这么多人讨论了,不懂我还有没有分?
 
雪鹰:
你有多少就讲多少
我会另开贴子给分的:)
希望你能多教教我!
 
用CreateThread吧
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
832
import
I
I
回复
0
查看
756
import
I
后退
顶部