Wątki ;-)

0

Dzieńdobry, da się do procedury odpalanej przez
CreateThread() przekazać jakieś argumenty ?

no bo wiecie, tam się ją wstawia z tym znaczkiem -> @
(CreateThread(nil, 0, @nazwa_procedury, nil, 0, x))
i nie specjalnie da się dodać w takiej składni nawiasik z parametrami [glowa]

ktoś pomoże ?

0
type
  PBlaBla = ^TBlaBla;
  TBlaBla = record
    Nazwa: string[20];
  end;

function  Func(Parameter: Pointer): Integer;
begin
  PBlaBla(Parameter)^.Nazwa
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ThId: Cardinal;
  Parametr: TBlaBla;
begin
  Parametr^.Nazwa := 'Test';
  BeginThread(nil, 0, Func, @Parametr, 0, ThId)
end;

Oczywiście Parametr może być dowolnego typu. Po prostu jako wskaźnik trzeba przekazać.

Aaa. I lepliej BeginThread używać zamiast CreateThread, bo dodatkowe zabezpieczenia wprowadza.

0

Nie sądziłem że w gąszczu tematów o to jak wysłać maila , ktokolwiek
zauważy moje pytanie, wielkie dzięki Dryobates [hurra]

tyle że mam mały problem [glowa]

function  Func(Parameter: Pointer): Integer;
begin
  form1.edit1.Text := PBlaBla(Parameter)^.Nazwa;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ThId: Cardinal;
  Parametr: TBlaBla;
begin
  Parametr^.Nazwa := 'Test';
  BeginThread(nil, 0, Func, @Parametr, 0, ThId);
end;

w lini Parametr^.Nazwa := 'Test'; wyskakuje: Pointer type required

próbowałem te daszki i małpy dostawiać ze wszystkich stron
ale działa tylko jak nie ma daszka, no i wtedy otrzymuje w edicie tekst:
ŔÖw¸Ôw˙˙˙˙ĆoÓw_:Ów€

coś źle robię ?

0

Nie sądziłem że w gąszczu tematów o to jak wysłać maila , ktokolwiek
zauważy moje pytanie, wielkie dzięki Dryobates [hurra]

W gąszczu takich pytań wyszukuje się tylko te ciekawsze.

Parametr: TBlaBla;

function  Func(Parameter: Pointer): Integer;
begin
  form1.edit1.Text := PBlaBla(Parameter)^.Nazwa;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ThId: Cardinal;
begin
  Parametr.Nazwa := 'Test'; //Mój błąd. Gdyby było PBlaBla to tak trzebaby, ale wtedy nie potrzebne jest @ przy Parametr
  BeginThread(nil, 0, Func, @Parametr, 0, ThId);
end;

Parametr musi być zmienną globalną, aby nie zniknął przykońcu funkcji. Ew. musisz tworzyć zmienną dynamiczną:

procedure TForm1.Button1Click(Sender: TObject);
var
ThId: Cardinal;
Parametr: PBlaBla;
begin
New(Parametr);
Parametr^.Nazwa := 'Test';
BeginThread(nil, 0, Func, Parametr, 0, ThId);
end;

Tylko gorzej ze zwalnianiem...

0

Teraz już mi działa [hurra]
jeszcze raz wielkie dzięki... [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1