Delphi中多线程访问同一个TStringList的有关问题

Delphi中多线程访问同一个TStringList的问题
把一个大文件Load到TStringList中,想用多线程分别访问stringlist的不同行,比如开5个线程,但发现5个线程耗时并不能缩短。大家帮我出一下注意吧!

------解决方案--------------------
因为delphi的线程访问vcl的时候做了同步处理,所以5个线程和一个线程没什么区别。

你不用tstinglist,用开辟内存的方法,然后按比例分给5个线程应该就可以了。
------解决方案--------------------
如果只对StringList中的行进行读取,不执行Add,Delete,Clear,LoadFromxxx等写操作时,可以不进行同步,直接访问即可,如果你没同步,而发现时间没缩短的话,那么可能的原因,1.写法有问题,2.单核CPU
------解决方案--------------------
看出来了,循环因子,没分开,每个线程基本上领取的任务都是一样的,都是从
m_arrayindex to m_endlineno
如果线程序同时执行,每个线程都是从0 to m_endlineno,全部重复执行了
修改一下即可
while True do begin
i := InterlockedIncrement(m_startlineno);
if i > m_endlineno then Break;


//Inc(i); 这行去掉
end; //while;

而你的cindex没看出它的具体作用,因此这样改写是否正确,需要测试,
------解决方案--------------------
采用互斥量应该可以解决:

1、定义一个OneMutex: THandle;

2、OneMutex := OpenMutex(MUTEX, false, 'Application');  
3、ReleaseMutex(OneMutex);
CloseHandle(OneMutex);

具体怎么用你自己调试一下吧。用这个处理多线程是很好用的。