当前位置:主页>销售管理软件> 列表

多线程waitfor异常问题。 找计算机管理软件

财务软件版1楼: unit Unit1;

interface

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

type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
iCount := 0;
listbox1.Items.Clear;
with ThreadT1.create(100, ''A'') do
waitfor;
ThreadT1.create(100, ''B'');
end;

end.
-------------------------------------------------------
unit Unit2;

interface

uses
Classes, SysUtils, unit1;

type
ThreadT1 = class(TThread)
private
FiMax: integer;
Foption: string;
Fi: integer;
{ Private declarations }
protected
procedure Execute; override;
procedure AddItem();
public
constructor create(iMax: integer; option: string);
end;

implementation

{ ThreadT1 }

procedure ThreadT1.AddItem;
begin
inc(Fi);
Form1.ListBox1.Items.Add(format(''item%s %d'', [Foption, Fi]));
end;

constructor ThreadT1.create(iMax: integer; option: string);
begin
FiMax := iMax;
Foption := option;
FreeOnTerminate := true;
inherited create(false);
end;

procedure ThreadT1.Execute;
var
i: integer;
begin
for i := 0 to fimax - 1 do
begin
sleep(50);
Synchronize(AddItem)
end;
end;

end.

-------------------------------
代码很简单,本来是想ThreadT1.create(100, ''A'')执行完后再执行ThreadT1.create(100, ''B''),但是运行报错。不知是怎么回事。大家帮忙看看。先谢过了。

2楼: 去掉waitfor试试 如计算机管理软件

3楼: 去掉waitfor?不是吧?我去掉FreeOnTerminate := true;还差不多但第一个线程在执行时主程序没有响应.

4楼: 去掉FreeOnTerminate := true


unit1创建改为:
with ThreadT1.create(100, ''A'') do
begin
waitfor;
free;
end;
就可以运行了.

因为你在线程中用waitfor, 所以必然阻塞主线程来等待线程A的执行. 所以不会有响应,
如果想先后执行A,B两个线程,又不阻塞主线程中的主界面, 建议你使用Event对象, A执行完后通知B开始执行就行了. 这样, 只是B先阻塞而已, 不会影响主程序.

5楼: 问题解决如我所回复。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1703826

6楼: event对象是最恰当的, 当然,互斥对象也能圆满实现.

财务软件版7楼: 帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯

8楼: 这下面一段是你写的吗?我最近检查也是"脑动脉血流减慢",但医生只说我是紧张过度,不知你治好了吗,能否跟我交流一下,我的QQ21536667,E-mail:21aming@163.com,不胜感激!!
"真痛苦,半个月前开始,发现右耳上方及后脑左部感觉疼痛。前日到医院做TCD一
查:左侧椎动脉血流减慢,右侧前动脉血流减慢,造成大脑供血不足,出现疼痛。
原因是用脑过度,医生要求多加休息,减少用脑。兄弟们,我还没满24岁,我该怎
么办?"

9楼: To Michael Lau:
不碍事,休息一下就好了。

10楼: 多人接受答案了。