我做了如下操作,希望各个线程分别去取数据进行处理,同步进行,每个数据处理一次,结果同一个数据
每一个线程都处理了一次,我该怎么做,请指教,谢谢
myCheckData: TQueue; procedure TComThread.inceptCheckData;
begin
if myCheckData.Count>0 then
myTCheckData:=myCheckData.Pop();
end;procedure TComThread.process;
begin
Synchronize(inceptCheckData); //多个线程同时操作队列的数据
end
每一个线程都处理了一次,我该怎么做,请指教,谢谢
myCheckData: TQueue; procedure TComThread.inceptCheckData;
begin
if myCheckData.Count>0 then
myTCheckData:=myCheckData.Pop();
end;procedure TComThread.process;
begin
Synchronize(inceptCheckData); //多个线程同时操作队列的数据
end
解决方案 »
- Type mismatch for field 'CurrentNO1', expecting: Integer actual: String.解决办法?
- FastReport每页最多显示10条记录怎么设置
- 一个软件中可能有N个窗体,那么这个软件中需要建立多少个ADOConnection,多少个Data Module,多少个ADOQuery,多少个DataSource?
- 请问:怎么对DrawGrid控件的单元格进行赋值!
- 怎麼安裝fastreport?(急,在線等待)
- 请问如何把dbf库中的内容追加到sql server库中?
- 怎样在自己的程序里执行SQL脚本文件?
- 向高手求助
- 如何获得windows路径
- 关于数据库自动给一条记录编号的问题,急用
- 多线程同步问题?请大家帮忙?
- 如何使用tlist 来添加树节点 ?????
SyncObjs;var
Lock: TCriticalSection;在你的Execute函数中,记住先构造Lock对象。
Lock.Enter;
try
Process;
finally
Lock.Leave;
end;
另外如果需要多线程,则每个线程要如下:
uses
SyncObjs;var
Lock: TCriticalSection;在你的Execute函数中,记住先构造Lock对象。
Lock.Enter;
try
GetOneData;//从队列中取出来
Process;//处理
DeleteOneData;//从队列中删除
finally
Lock.Leave;
end;
这样,多个线程也不会都取同一个data了.