Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Thread-Parameter auf dem Stack übergeben

  Alt 12. Mär 2008, 10:05
Dass es ohne warten nicht funktionieren würde ist klar, aber das tue ich ja in meinem Fall. Und was das Freigeben angeht, der Speicher auf dem Stack wird beim Verlassen der Funktion automatisch vom Betriebssystem aufgeräumt. Habe ich das so richtig verstanden?

@sirius: Stimmt, hier ist sie ja global, also auf dem Heap. Dann muss ich das noch mal umbauen.

So sollte es eigentlich sein:

Delphi-Quellcode:
function ThreadFunc(tp: PThreadParams): Integer;
var
  Number: Integer;
  Text: String;
  s: String;
begin
  Number := PThreadParams(tp)^.Number;
  Text := PThreadParams(tp)^.Text;
  s := 'Zahl: ' + IntToStr(Number) + #13#10 + 'Text: ' + Text;
  Result := MessageBox(0, PChar(s), 'Thread', MB_YESNO or MB_ICONINFORMATION);
end;

procedure RunThread;
var
  tp: TThreadParams;
  Thread: THandle;
  ThreadID: Cardinal;
  ExitCode: Cardinal;
begin
  tp.Number := 42;
  tp.Text := 'Die Antwort.';
  Thread := BeginThread(nil, 0, @ThreadFunc, @tp, 0, ThreadID);
  WaitForSingleObject(Thread, INFINITE);
  GetExitCodeThread(Thread, ExitCode);
  case ExitCode of
    IDYES: Writeln('Benutrzer hat "Ja" angeklickt.');
    IDNO: Writeln('Benutzer hat "Nein" angeklickt.');
  end;
  CloseHandle(Thread);
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat