嗨,有可能找到关注任务的例子。 我正在连接Webscocket并收到消息。 收到消息后,我必须将其插入数据库,然后尝试在队列线程池中进行操作。 目前,我正在执行以下操作,但是我不认为这是最核心的方法。
var MyStrings:Tstringlist;
MyStrings:Tstringlist.create;
//On Websocket message
MyStrings.add(Message);
//and in a Thread that always is Running i do
procedure TMythread.Execute;
begin
while true
begin
if MyStrings.count>0 Then
begin
/////////////////////////////////////
//database jobs
//with the string MyStrings.strings(0)
/////////////////////////////////////
MyStrings.delete(0);
end;
end;
end;
但是以这种方式,我一步一步地处理作业,怎么可能同时拥有10个线程来处理任务 并在10个线程完成后从Mystrings中弹出另外10个字符串(如果存在)并将它们处理为10个单独的线程?
答案 0 :(得分:1)
首先,您必须保存数据交换。如果您有一个要在不同线程上更改(添加,删除条目)的列表,则必须锁定资源。
对于线程队列/池,请查看以下链接:
http://docwiki.embarcadero.com/Libraries/Rio/en/System.Threading.TTask http://docwiki.embarcadero.com/Libraries/Rio/en/System.Classes.TThread.Queue