多线程效率问题(30分)

  • 主题发起人 主题发起人 sun_delphi
  • 开始时间 开始时间
S

sun_delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个程序,后台要运行大工作量的操作,
我采用了多线程操作,但是一旦后台运行起来了
前面的主程序就不动了。必须等到执行完毕后才
能操作,请问这种功能最好采用什么模式编程。
敬请指教!!
没多少分了,见谅!!
 
就是多线程啊,这个是最好的方法吧,把你的线程代码贴出来看看,有什么错误才好说哦!
 
unit t_receive_mail;
interface
uses
Classes, Messages, SysUtils, Variants,Graphics, Controls,Dialogs,
windows,u_fax_receive,u_main;
type
Treceive_mail = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
public
Constructor create(re_type:integer;re_str:string);
end;

implementation
{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure Treceive_mail.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
}
{ Treceive_mail }
constructor Treceive_mail.create(re_type:integer;re_str:string);
var
receive_mail:function (receive_type:integer;receive_str:string):boolean;stdcall;
Handle1: THandle;
begin
try
Handle1:=
LoadLibrary(pchar(ExtractFilePath(ParamStr(0))+'dll_receive_dll.dll'));
if Handle1<>0 then
begin
receive_mail:=GetProcAddress(Handle1,pchar('receive_mail'));
receive_mail(re_type,re_str);
freelibrary(Handle1);
end;
except
;
end;
if assigned(frm_fax_manage) and (frm_main.str_fax_lei.Text='收件箱') then
frm_fax_manage.t_fax_manage.Requery;
inherited create(false);
freeonterminate:=true;
end;

procedure Treceive_mail.Execute;
begin
{ Place thread code here }
end;

end.
 
一开始用线程做不行,后改用dll还不行,现在线程加dll还是不行,请帮忙看看,
我参考了一下foxmail,他好像调用了另一个程序,不知道不同程序之间调用如何实现这种功能!!
 
兄弟,你放在Create当中当然不行了,主线程要等你那个Create返回了才会继续运行,你放在Execute中试试,或者直接用CreateThread得了,多背点API,以后转学别的语言也方便。
 
对,create中只是把你需要用到的线程变量做个初始化,具体的工作需要在execute过程中实现,这样才是完全的线程。
 
谢谢,问题解决了
 
后退
顶部