一个关于线程处理的问题(100分)

  • 主题发起人 主题发起人 guaiguaizhang
  • 开始时间 开始时间
G

guaiguaizhang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主线程中开了若干个子线程,程序就运行不正常了,程序如下
主线程
var
thread1 : array of TThread1;
thread_length : integer;
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
thread_length := 5;
setlength(Thread1, thread_length);
for i:=0 to thread_length-1do
thread1 := TThread1.create(false);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i:=0 to thread_length-1do
thread1.terminate;
end;

子线程
procedure TThread1.Execute;
begin
repeat
if terminated then
exit;
...
until false;
end;

 
你的线程里都干吗了?
 
都是些数学运算
 
代码上看是没有什么问题
 
你说的不正常是运行出的结果不正常还是什么不正常呀?
如果是结果你可以考虑下同步的问题。
 
我只大概写了一下
内部没有问题
原来建立子线程后先将其挂起,需要时再resume,处理完后又挂起
但这样太浪费线程资源了
所以改为线程主动找数据
这样建立线程后线程即处于运行状态
但这样程序运行时,主线程就没反应了
windows提示该应用程序没有响应
不只是怎么回事
 
不好意思,这里粘错了
procedure TForm1.FormClose(Sender: TObject);
var
i : integer;
begin
for i:=0 to thread_length-1do
thread1.terminate;
end;
 
我看你的程序需要进行同步处理,不是简单的挂起就可以了,
 
每个子线程都是对某数组中的不同数据进行处理的
绝不可能对同一数据操作
这个我控制了的
 
cpu 100%了吧
线程将cpu全占光了吧,没时间去处理主进程的消息了
 
是的
我加了sleep后就好了
 
多人接受答案了。
 
后退
顶部