复制文件与线程的关系 |
尚未結案
|
cgc
一般會員 發表:1 回覆:0 積分:0 註冊:2005-03-31 發送簡訊給我 |
我用了“關於複製檔案”一文中的方法,应用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.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |