Delphi 多线程问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 多线程问题相关的知识,希望对你有一定的参考价值。

我使用的是Delphi的TThread类.

想达到的目的是:
listbox1 为用户列表
listbox2 为代理IP列表
想实现采用多线程的方法,使用idhttp控件,采集各个用户的信息.

自己不懂的地方是:
listbox1和listbox2都是VCL控件.而且不是线程安全的,
线程中使用这两个列表中的数据,同步问题自己不知怎么解决!
一直是报READ错误.那些临界区等.我在网上也琢磨了,但是还是缺乏应用实践.

想要的结果是:
执行若干自定义好的线程数量,然后将代理IP列表的数据读取一行,使用
idhttp1.proxyparams.proxyserver和proxyport方法设置好IDHTTP的代理
然后使用用户列表的数据,模拟登陆网站截取相关的信息.这里我遇到问题了
如果当在采集的时候这个代理IP正好不能用了,那么此用户数据不执行+1操作.使代理IP列表的数据执行+ 1操作
从而换一个代理IP.如果成功呢,就接着换用户和代理IP.继续采集.这里想了好几天,都不知道怎么解决,
给代理IP列表+1操作很简单.但是还要考虑同步的问题.就不会了!

这个程序里我最头疼的是:
VCL数据同步和代理出错继而向下+1操作!

烦请高手给予帮助,帮忙编写下代码更好!也希望能跟大家好好学习Delphi.如果高手感觉分不够,可以再开贴给分.
分对我来说不重要.重要的是攻克我在多线程中的技术难题.谢谢了

看得不是很明白.
有本Delphi多线程的电子书可以自己去看下
参考技术A VCL的访问需要TThread的Synchronize,多个线程读写一个对象的时候则需要临界区了

delphi 7 做多线程程序,内存不断增加,怎么解决?

type
Tmythread = class(TThread)
private
Private declarations
protected
procedure Execute; override;
end;

procedure Tmythread.Execute;
var
s1,s2,ReadStr,sendstr:string; //ReadStr,
j,i,m,n:integer;
begin
readstr:=ReadS;
ReadS:='';
FreeOnTerminate:=true;
EnterCriticalSection(cs);
try
while trim(ReadStr)<>'' do
begin
i:=length(ReadStr);
s1:=leftstr(ReadStr,1);
j:=pos(';',ReadStr);
if (j>0) then
begin

s2:=leftstr(ReadStr,j);
case TypeList.IndexOf(s1) of
0:begin
Frm_ISMain.ReadSearch(s2);
end;
1:begin
//Frm_ISMain.ReadData(s2);
end;
2:begin
//Frm_ISMain.PowerChange(s2);
end;
else
break;
end;//case
if j=i then
ReadStr:=''
else if j<i then
ReadStr:=Rightstr(ReadStr,i-j);
end
else
break; //if
end; //while
Finally
LeaveCriticalSection(CS);
end;
end;

内存泄露是因为有对象被创建或者内存被申请等,最终没有被释放,才造成内存被消耗,从上面代码看不出 参考技术A 改线程为动态链接库试试!追问

把多线程改成函数,内存就不曾加了,这是怎么回事

参考技术B 用freeandnil(),不用free试一试

以上是关于Delphi 多线程问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi 的多线程问题

delphi 多线程程序中内存不断上升的问题!

Delphi多线程怎么处理?

Delphi 多线程问题

Delphi多线程问题

Delphi 多线程问题 急~~~~