我做了如下操作,希望各个线程分别去取数据进行处理,同步进行,每个数据处理一次,结果同一个数据
每一个线程都处理了一次,我该怎么做,请指教,谢谢
myCheckData: TQueue;      procedure TComThread.inceptCheckData;
begin
    if myCheckData.Count>0 then
        myTCheckData:=myCheckData.Pop();
end;procedure TComThread.process;
begin
    Synchronize(inceptCheckData); //多个线程同时操作队列的数据
end

解决方案 »

  1.   

    uses
      SyncObjs;var
      Lock: TCriticalSection;在你的Execute函数中,记住先构造Lock对象。
      Lock.Enter;
      try
        Process;
      finally
        Lock.Leave;
      end;
      

  2.   

    首先,我看不出你要线程的必要.既然多个线程都是取一个队列,一个线程不好吗?
    另外如果需要多线程,则每个线程要如下:
    uses
      SyncObjs;var
      Lock: TCriticalSection;在你的Execute函数中,记住先构造Lock对象。
      Lock.Enter;
      try
        GetOneData;//从队列中取出来
        Process;//处理
        DeleteOneData;//从队列中删除
        
      finally
        Lock.Leave;
      end;
    这样,多个线程也不会都取同一个data了.