这种情况如果不用time控件可不可以 ( 积分: 100 )

  • 主题发起人 主题发起人 愚鱼
  • 开始时间 开始时间

愚鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
我开了十个线程,用了一个timer控件来每50时间段来触发执行一下:
Tform1.timertimer();
begin
while (所存放网址的Tstringlist不为空)do
try
for i:=0 to 9
begin
.....
具体语句:为线程传参数
.......
end;
finally
end;
但现在的问题是我的十个线程每个斗志工作了两次就不工作了,不知道是什么原因
还有我的这种情况如果不用time控件可不可以,应该怎么处理能使我的十个线程只要处于
supendened就循环执行直到Tstinglist表空为止
请各位打下多多帮忙,我实在是不知该怎么办了。
 
我开了十个线程,用了一个timer控件来每50时间段来触发执行一下:
Tform1.timertimer();
begin
while (所存放网址的Tstringlist不为空)do
try
for i:=0 to 9
begin
.....
具体语句:为线程传参数
.......
end;
finally
end;
但现在的问题是我的十个线程每个斗志工作了两次就不工作了,不知道是什么原因
还有我的这种情况如果不用time控件可不可以,应该怎么处理能使我的十个线程只要处于
supendened就循环执行直到Tstinglist表空为止
请各位打下多多帮忙,我实在是不知该怎么办了。
 
为什么要用十个线程?用一个线程来处理TStringList中的字符串不好吗?
不工作的原因要具体代码分析的.为什么线程处于挂起时要循环执行直到TStringList表空为止?线程挂起了还能处理吗?
 
你要作什么工作呢?
为线程传的参数,都是哪里来的呢?可以让线程自己取吗?
 
用timer实际上也相当于开了一个线程,如果想用主线程控制别的线呈,可以这样
StopApp := True;
t := GetTickCount;
while StopAppdo
begin
Application.processmessage;
if GetTickCount-t>50 then
begin

for i := 1 to 10do
...
t := Gettickcount;
end;

end;

如果要结束主线程,在某个地方将StopApp设置为false即可。
 
楼上GetTickCount-t>50 偶没看懂是干什么用的?郁闷
 
to dedema用十个线程不用一个是因为,在主界面上有一个listbox控件来显示跟踪个个线程的状态:正在连接,正在获取数据,数据下载完毕等等,如果以给线程有点太单薄了。看上去不好看。
十个TStringList表在表头不断取地址,在表为不断加新找到的地址,只要十个表中任何一个有地址就不断取出来,付给相应的十个线程,知道表空为止。
正因为线程挂起了说明他空闲了,才能重新付给他网址并resum它,使其工作,这也是我用timer的原因阿。
to twos,
为线程传的参数,都是主线程控制付给的,我不知道怎么让线程自己取
 
想用主界面上的一个LISTBOX跟踪每个线程状态的话,不如每个线程完成一定的状态后向主线程发一个消息。消息里带上自己的一些信息就行了。主线程根据来的消息给子线程分派任务,更新主界面。
你这是不是面试题啊?我怎么感觉我做过啊。是不是还要把网页上的东西分析一下?
 
用API SetTimer
 
to 火山,确实要对网页进行分析,我市把这部分放在了主线程中来处理的,
但这并不是面试题,是我现在手头上的一个项目。
 
后退
顶部