多线程问题

cs_wgf 2009-10-30 10:55:23
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
type
Filecopy = class(TThread)
protected
procedure Execute; override;
end;
var
F: integer;
CS: TRTLCriticalSection;
{$R *.dfm}

procedure Filecopy.Execute;
begin
EnterCriticalSection(CS);
FreeOnTerminate := True;
if F=1 then
copyfile('F:\1.exe','E:\1.exe',false)
else if F=2 then
copyfile('F:\2.exe','E:\2.exe',false)
else if F=3 then
copyfile('F:\3.exe','E:\3.exe',false)
else showmessage('ok了');
LeaveCriticalSection(CS);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
F:=0;
for i:=0 to 3 do
begin
F:=F+1;
Filecopy.Create(false);
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(CS);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(CS);
end;

end.
这是小弟学习多线程是写的一段代码
高手看看 为什么不能加f盘里的3个文件全都复制到E盘里
...全文
70 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cs_wgf 的回复:]
什么意思?
[/Quote]

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
F:=0;
for i:=0 to 3 do
begin
F:=F+1;
a:=true;
Filecopy.Create(false);
while a do sleep(1);
end;
end;

增加一个布尔值a,在线程里做相应处理。

或者在线程的Create加一个参数。
cs_wgf 2009-10-30
  • 打赏
  • 举报
回复
什么意思?
lhy 2009-10-30
  • 打赏
  • 举报
回复
等线程结束了再改f。
cs_wgf 2009-10-30
  • 打赏
  • 举报
回复
来人帮帮忙啊 在线等
cs_wgf 2009-10-30
  • 打赏
  • 举报
回复
高手进来来人帮帮忙啊

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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