1,183
社区成员
发帖
与我相关
我的任务
分享
unit U1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
mLog: TMemo;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
Memo5: TMemo;
Memo6: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
APPRUN: Boolean = False;
hThread,
hThread2,
hThread3,
hThread4,
hThread5,
hThread6: THandle;
CS: TRTLCriticalSection; //临界区对象
List: TStringList;
procedure ThreadLog(Const msg: String);
begin
EnterCriticalSection(CS);
TMemo(
List.Objects[List.IndexOf(IntToStr(GetCurrentThreadId()))]
).Lines.Add(FormatDateTime('[yyyy-mm-dd hh:nn:ss.zzz]: ', Now) + IntToStr(GetCurrentThreadId()));
LeaveCriticalSection(CS);
end;
function ThreadJob(): DWORD; stdcall;
begin
while APPRUN do begin
ThreadLog('');
end;
Result := 0;
end;
//开始运行或停止程序
procedure TForm1.Button1Click(Sender: TObject);
var
ID: DWORD;
begin
if APPRUN then begin
Button1.Caption := '开始';
APPRUN := False;
CloseHandle(hThread);
CloseHandle(hThread2);
CloseHandle(hThread3);
CloseHandle(hThread4);
CloseHandle(hThread5);
CloseHandle(hThread6);
end
else begin
APPRUN := True;
Button1.Caption := '停止';
List.Clear;
hThread := CreateThread(nil, 0, @ThreadJob, nil, CREATE_SUSPENDED, ID);
List.AddObject(IntToStr(ID), Memo1);
hThread2 := CreateThread(nil, 0, @ThreadJob, nil, CREATE_SUSPENDED, ID);
List.AddObject(IntToStr(ID), Memo2);
hThread3 := CreateThread(nil, 0, @ThreadJob, nil, CREATE_SUSPENDED, ID);
List.AddObject(IntToStr(ID), Memo3);
hThread4 := CreateThread(nil, 0, @ThreadJob, nil, CREATE_SUSPENDED, ID);
List.AddObject(IntToStr(ID), Memo4);
hThread5 := CreateThread(nil, 0, @ThreadJob, nil, CREATE_SUSPENDED, ID);
List.AddObject(IntToStr(ID), Memo5);
hThread6 := CreateThread(nil, 0, @ThreadJob, nil, CREATE_SUSPENDED, ID);
List.AddObject(IntToStr(ID), Memo6);
ResumeThread(hThread);
ResumeThread(hThread2);
ResumeThread(hThread3);
ResumeThread(hThread4);
ResumeThread(hThread5);
ResumeThread(hThread6);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(CS);
List := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(CS);
List.Free;
end;
end.
GS : string;
implementation
{$R *.dfm}
function ThreadProc(p: Pointer): LongInt ; stdcall;
begin
while GS<>'' do //這樣沖突的機會較大
begin
GS := GS + 'sss';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
id : Cardinal;
i,count: Integer;
begin
count := 2;
GS := '111';
for i:=1 to count do
begin
CreateThread(nil,SizeOf(Pointer),@ThreadProc,nil,0,id);
end;
end;
function ThreadProc(p: Pointer): LongInt ; stdcall;
var
s : string;
begin
while GS<>'' do
begin
s := s + GS ;
end;
end;
function ThreadFun(p:Pointer): LongInt; stdcall;
var
Test: String;
I: integer;
begin
for I :=0 to 1000 do
begin
Test := 'Test!';
Test := Test + 'Test!';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
H: THandle;
ThreadID: DWORD;
I: Integer;
begin
for i:=1 to 10 do // 测试一个和十个
H := CreateThread(nil, 0, @ThreadFun, nil, 0, ThreadID);
end;