一组线程数组结束后返回一个消息,不知道该如何写请指教//线程部分////////////////
type
TLoadOLMails = class (TThread)
private
FThread_ID : Integer;
FMaxThreadCount : Integer;
protected
procedure Execute; override;
public
constructor create(const AThreadID,AMaxThreadCount:Integer);
end;
implementationconstructor TLoadOLMails.create(const AThreadID,AMaxThreadCount:Integer);
begin
FThread_ID := AThreadID;
FMaxThreadCount := AMaxThreadCount;
inherited Create(False);
end;procedure TLoadOLMails.Execute;
var
I : Integer;
begin
Priority := tpLower;
FreeOnTerminate := True;
//一段处理过程
for I := $FFFFFF downto 1 do
if (I mod FMaxThreadCount)=(FMaxThreadCount-FThread_ID) then begin
//……………………
//处理过程
//……………………
end;
end;//////////////////////////////////////
//主程序中的调用过程
var
i : integer;
LoadOLMails : array of TLoadOLMails; //这个是全局变量
begin
SetLength(LoadOLMails,4); //定义4个线程
for i:=Low(LoadOLMails) to High(LoadOLMails) do begin //建立4个线程对象
LoadOLMails[i]:=TLoadOLMails.create(i+1,Length(LoadOLMails));
end;
/////////////////////////////////////
主线程通过什么能够知道这4个线程分别处理完各自的任务,请提供完整代码,谢谢
type
TLoadOLMails = class (TThread)
private
FThread_ID : Integer;
FMaxThreadCount : Integer;
protected
procedure Execute; override;
public
constructor create(const AThreadID,AMaxThreadCount:Integer);
end;
implementationconstructor TLoadOLMails.create(const AThreadID,AMaxThreadCount:Integer);
begin
FThread_ID := AThreadID;
FMaxThreadCount := AMaxThreadCount;
inherited Create(False);
end;procedure TLoadOLMails.Execute;
var
I : Integer;
begin
Priority := tpLower;
FreeOnTerminate := True;
//一段处理过程
for I := $FFFFFF downto 1 do
if (I mod FMaxThreadCount)=(FMaxThreadCount-FThread_ID) then begin
//……………………
//处理过程
//……………………
end;
end;//////////////////////////////////////
//主程序中的调用过程
var
i : integer;
LoadOLMails : array of TLoadOLMails; //这个是全局变量
begin
SetLength(LoadOLMails,4); //定义4个线程
for i:=Low(LoadOLMails) to High(LoadOLMails) do begin //建立4个线程对象
LoadOLMails[i]:=TLoadOLMails.create(i+1,Length(LoadOLMails));
end;
/////////////////////////////////////
主线程通过什么能够知道这4个线程分别处理完各自的任务,请提供完整代码,谢谢
解决方案 »
- delphi生成的可执行文件,在其它目录无法设断点调试,有解决方法吗?
- 请教关于dbgrideh的小问题
- adoquery中如何使用update语句阿?
- 怎么在执行程序中生成一个独立的 exe 文件?
- 如何让窗体变成我所想要的大小
- 我快搞晕了,大虾们,快来帮帮我!mscomm控件的问题!
- ADOQUERY中SQL为'select 计算_姓名='',姓名代码,工资 FROM 工资',列计算_姓名如何 实现修改功能?
- 我只想改变TreeView中某几个个节点的字体颜色,而不改变其它节点的字体颜色,应该怎么办?
- 请问,如何将DBTextEdit的文本写入数据库中!!!急!
- delphi与vfp的数据库功能有什么异同?我没学过delphi!不过,很想学!
- Access+Delphi 时间查询,删除指定时间内的记录??
- 用WebBrowser控件写自动登陆网页的程序遇到提交按钮是图片怎么办?
有一个不错的例子。
然后每一个对应一个线程,构造线程以后,主程序直接
for i:=0 to 3 do
event[i].waitfor(INFINAL);
线程中执行完毕以后event.setevent;就返回给主线程乐,但是这样有个问题,朱线程会挂死,所以你应该在主线程里面再添加一个定义的命令线程,防止主线程因为waitsingleobject而看起来死机的样子,具体思路就这些,你可以尝试一下。还有,如果是针对单个线程的返回,最简单的就是主线程中运行线程以后,直接调用线程的waitfor函数来等待他的执行完毕。