A
AKFish
Unregistered / Unconfirmed
GUEST, unregistred user!
做了个线程池
希望由线程自行到线程池那里领取任务
于是在TThreadPool类中写了一个GetTask方法
线程调用这个方法获得任务
function TThreadPool.GetTask(TID: integer): boolean;
var
P: Pointer;
begin
P := FTasks.Pop();
//FTasks: TQueue;
是任务队列
FThreads[TID].SetTask(P);
Result := (P <> nil);
end;
其中SetTask是线程对象的方法
用于把对领取到的任务进行预处理
GetTask的返回值如果为false则触发timeout
一定时间后Free空闲的线程
现在的问题是,实际调试的时候,线程领取不到任务.添加断点调试发现,GetTask中的代码不会完全执行,一般只执行第一句.考虑到可能是同步的问题,就用了Synchronize,问题依旧.求问题原因及解决方法...
希望由线程自行到线程池那里领取任务
于是在TThreadPool类中写了一个GetTask方法
线程调用这个方法获得任务
function TThreadPool.GetTask(TID: integer): boolean;
var
P: Pointer;
begin
P := FTasks.Pop();
//FTasks: TQueue;
是任务队列
FThreads[TID].SetTask(P);
Result := (P <> nil);
end;
其中SetTask是线程对象的方法
用于把对领取到的任务进行预处理
GetTask的返回值如果为false则触发timeout
一定时间后Free空闲的线程
现在的问题是,实际调试的时候,线程领取不到任务.添加断点调试发现,GetTask中的代码不会完全执行,一般只执行第一句.考虑到可能是同步的问题,就用了Synchronize,问题依旧.求问题原因及解决方法...