全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:883
推到 Plurk!
推到 Facebook!

复制文件与线程的关系

尚未結案
cgc
一般會員


發表:1
回覆:0
積分:0
註冊:2005-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-02 16:29:09 IP:211.158.xxx.xxx 未訂閱
我用了“關於複製檔案”一文中的方法,应用copyfileex和copyprogressroutine函数复制文件,同时使用了线程。但不知怎么总是出错。请各位大师指点。 unit a1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, SHellApi, ComObj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; ProgressBar1: TProgressBar; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function CopyProgressRoutine( TotalFileSize : LARGE_INTEGER; // total file size, in bytes TotalBytesTransferred : LARGE_INTEGER; // total number of bytes transferred StreamSize : LARGE_INTEGER; // total number of bytes for this stream StreamBytesTransferred : LARGE_INTEGER; // total number of bytes transferred for this stream dwStreamNumber : DWORD; // the current stream dwCallbackReason : DWORD; // reason for callback hSourceFile : THANDLE; // handle to the source file hDestinationFile : THANDLE; // handle to the destination file lpData : TProgressBar // passed by CopyFileEx ) : DWORD; stdcall; var Pos: Int64; begin if lpData.Max <> TotalFileSize.QuadPart then lpData.Max := (TotalFileSize.QuadPart); Pos := (TotalBytesTransferred.QuadPart); lpData.Position := pos; Result := PROGRESS_CONTINUE; end; function MyThreadFunc(P:pointer):Longint;stdcall; var DC:HDC; str1,str2:string; bcancel:BOOL; bbool:BOOL; begin DC:=GetDC(Form1.Handle); str1:='n:\a1\aa.wmv';; str2:='n:\a2\aa.wmv';; bcancel := false; Form1.ProgressBar1.smooth := true; Form1.ProgressBar1.Position := 0; bbool:=CopyFileEx(PChar(str1), //來源 pchar(str2), //目地 @CopyProgressRoutine, Form1.ProgressBar1, @bcancel, COPY_FILE_RESTARTABLE); if bbool then showmessage('Succ') else showmessage('ERR'); { if CopyFileEx(PChar(str1),pchar(str2),@CopyProgressRoutine, Form1.ProgressBar1,@bcancel,COPY_FILE_RESTARTABLE) then showmessage('Succ') else showmessage('ERR');} ReleaseDC(Form1.Handle,DC); end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); var hThread:Thandle;//定义一个句柄 ThreadID:DWord; begin hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID); if hThread=0 then messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK); end; end.
系統時間:2024-06-08 9:40:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!