Hi,
vielleicht könnt ihr mal drübersehen. Das ist nur ein kleiner test. Ich weiss das ich den status nicht beachte und man z.b. 2x Start klicken könnte. Es geht mir nur darum ob das soweit ok ist.
Eventuell kann es ja auch als vorlage für andere user dienen.
Gruss und danke im voraus
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TMyThread =
record
ThreadID: DWORD;
ThreadHandle: THandle;
OutPut :TLabel;
MyID :Integer;
end;
var
MyThread :
Array[0..10]
of TMyThread;
olabel :
Array[0..2]
of TLabel;
// = (Form1.Label1,Form1.Label2,Form1.Label3);
{******************************************************************************
Flashing(varptr: Pointer): LongInt; stdcall - 12/22/2009 4:13
******************************************************************************}
function Flashing(varptr: Pointer): LongInt;
stdcall;
var
i,n :Integer;
begin
n:=integer(varptr^);
for i:=0
to 70
do begin
MyThread[n].OutPut.Caption:='
Ich bin T#'+IntToStr(n)+'
'+IntToStr(i);
sleep(700+(n*200));
end;
Result:=0;
end;
{Flashing(zahl: Pointer): LongInt; stdcall}
procedure TForm1.Button1Click(Sender: TObject);
var
i :Integer;
begin
olabel[0]:=Label1;
olabel[1]:=Label2;
olabel[2]:=Label3;
for i:=0
to 2
do begin
MyThread[i].MyID:=i;
MyThread[i].OutPut:=oLabel[i];
MyThread[i].ThreadHandle:=CreateThread(
nil, 0, TFNThreadStartRoutine(@Flashing),@MyThread[i].MyID, 0, MyThread[i].ThreadID);
if MyThread[i].ThreadHandle<>0
then CloseHandle(MyThread[i].ThreadHandle);
end;
end;
end.
EDIT: Was öfters passiert ist, das er die ausgaben links oben auf dem monitor macht. Vielleicht hat einer ne idee wieso er das macht. Das ist ein Snapshoot von oben links.
http://fli4l.hosting-4-u.de/error.gif