delphi的线程调用

genispan 2008-04-14 10:52:37
我要在线程中调用如下函数,但提示出错:

function TForm1.NewThread(P:pointer):Longint;stdcall;
Var
FilesExtracted: Integer;
Begin
UnZip1.OverwriteMode:= omOverwrite;
UnZip1.ArchiveFile := Edit3.Text; // archive filename
UnZip1.ConfirmOverwrites := false; // default = False
UnZip1.RecurseDirs :=true; // default = False
UnZip1.FileSpec.Clear(); //
UnZip1.FileSpec.Add('*.*'); // *.* = extract all
UnZip1.ExtractDir := Edit5.Text; //
If DirectoryExists(Edit5.Text) Then // if the directory exists then extract
Begin
FilesExtracted := UnZip1.Extract();
ShowMessage('Files Extracted: ' + IntToStr(FilesExtracted));
End
Else
Begin
ShowMessage('Extract dir not defined');
Exit;
End;
end;

调用线程的代码:

Cthread:=CreateThread(nil,0,@TForm1.NewThread,nil,0,Tid);

希望达人帮看看 谢谢了!!
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Corn1 2008-04-14
  • 打赏
  • 举报
回复
把NewThread改成公用过程,不要作为Form1的成员。
ice241018 2008-04-14
  • 打赏
  • 举报
回复
function TForm1.NewThread(P:pointer):Longint;stdcall;
Var
FilesExtracted: Integer;
UnZipDemo:TUnZip;
Begin
UnZipDemo:=TUnZip.Create(self);
UnZipDemo.OverwriteMode:= omOverwrite;
UnZipDemo.ArchiveFile := sourcefile; // archive filename
UnZipDemo.ConfirmOverwrites := false; // default = False
UnZipDemo.RecurseDirs :=true; // default = False
UnZipDemo.FileSpec.Clear(); //
UnZipDemo.FileSpec.Add('*.*'); // *.* = extract all
UnZipDemo.ExtractDir := destination; //
If DirectoryExists(destination) Then // if the directory exists then extract
Begin
FilesExtracted := UnZipDemo.Extract();

ShowMessage('Files Extracted: ' + IntToStr(FilesExtracted));
End
Else
Begin
ShowMessage('Extract dir not defined');
Exit;
End;
genispan 2008-04-14
  • 打赏
  • 举报
回复
up
Delphi线程池实现多线程FTP分段下载组件 by :renshouren mail:114032666@qq.com QQ:114032666 2019.10.05 使用的组件 1、TIdFTP Indy FTP客户端 2、TThreadsPool 线程池 工作原理及流程 调用本单元,将自动在程序初始化时生成线程池TThreadPoolDown实例 Share_ThreadPool_FTPDown 一、外部调用方法 外部只需要一次性调用 FtpDown() 函数向线程池加入下载任务,下载任务执行中的事件会通过调用时注册的 回调函数 AFtpDownEvent 进行通知。 二、内部工作流程 1、FtpDown()函数将调用TThreadPoolDown.AddFtpDown() ,然后调用TADownFileObj.MakeGetFileSizeObj()分配线程任务 本过程中,将向回调函数 AFtpDownEvent 触发 HEM_ADDURL 事件通知 2、工作线程调用任务对象TFTPHeadObj.DoThreadExecute 过程获取远程文件大小 备注:该功能实际使用到FTP命令SIZE,该命令一些老版本FTP服务器有可能不支持 本过程中,若获取文件大小成功,将向回调函数 AFtpDownEvent 触发 HEM_GETSIZE 事件通知, 若失败,则触发 HEM_ERROR 事件通知 3、得到远程文件大小后,调用TADownFileObj.MakeGetObjs(),分配获取远程文件线程任务 本过程中,开始时,将向回调函数 AFtpDownEvent 触发 HEM_WORKBEGIN 事件通知 在接收数据时,向回调函数 AFtpDownEvent 触发 HEM_WORK 事件通知 4、工作线程调用任务对象 TFTPGetObj.DoThreadExecute 实际下载远程文件数据块 每一个数据块下载任务完成后,触发 HEM_BLOCKOK 事件通知 5、所有数据块完成后,将调用 DoDownloadOK 函数,触发 HEM_DOWNOK 事件通知

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧