idtcpserver多线程,其中有listbox操作,如果多个线程同时进行,CPU100%(96分)

  • 主题发起人 主题发起人 xoeo
  • 开始时间 开始时间
X

xoeo

Unregistered / Unconfirmed
GUEST, unregistred user!
其中有如下代码
listbox.items.addend(xxxxxx);
listbox.items.delete(x);
等。
请问如何避免多线程之间的冲突导致的CPU 100%?
 
Synchronize
 
能否简单给个例子?
 
procedure TMyThread.listboxadd;
begin
listbox.items.addend(xxxxxx);
listbox.items.delete(x);
end;
procedure TMyThread.Execute;
begin
...
Synchronize(listboxadd);
...
end;
 
var
testMutex: THandle;

function myfunction:boolean;
begin
testMutex:=CreateMutex(nil,True,testname);
...........代码段;
ReleaseMutex(testMutex);
end;

这个方法能否解决?
 
只要作到线程没有冲突就可以,不过对界面进行操作用Synchronize比较好,因为Synchronize是在主线程里运行的,不会和VCL冲突。
另外如果界面的操作量太大还是会100%的,这就和显卡或显卡驱动有关了
 
procedure TMyThread.listboxadd;
begin
listbox.items.addend(xxxxxx);
listbox.items.delete(x);
end;

我用的D7,无法通过,请问为什么呢?procedure TMyThread.listboxadd中的TmyThread和listboxadd名称需要定义吗?
 
在帮助里都有的,TMyThread是线程名,listboxadd过程名

就是
AThread.Synchronize(过程名);
 
OK。
有什么变量类型可以进行类似listbox.items的各种操作呢?
 
接受答案了.
 
后退
顶部