做了个线程池
希望由线程自行到线程池那里领取任务
于是在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,问题依旧.求问题原因及解决方法...
我先去试试
这个线程池只有在一定时间内没有新任务才会Free线程的
之前找到的一个所谓线程池的代码就是不断的重新创建线程
所以才自己做一个
代码依然只执行第一句
然后就跳到别的地方去了
Thread类的Excute中的代码也不会执行完
只要执行到调用(直接或间接)GetTask的地方线程就不往下执行了
Excute里是一个while true循环
只有没有得到任务才会Suspend
但是现在看起来是执行了那一句代码以后整个线程就结束了...