Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TThread - Variable zur Laufzeit ändern (https://www.delphipraxis.net/31710-tthread-variable-zur-laufzeit-aendern.html)

Unplugged 12. Okt 2004 20:55


TThread - Variable zur Laufzeit ändern
 
Hallo,

zu meinem Problem. Je nach Anfrage starte ich einen Thread für eine Remote-Administrator-Sitzung. Funktioniert auch problemlos, nur möchte ich jetzt gerne mehr als eine Sitzung gleichzeitig erlauben.

Eine Variable setzen kann ich ja, wenn ich TThread.Variable := wert; setze.

Aber was passiert jetzt, wenn der Thread mehrfach gestartet ist? Weil letztlich soll ja nur die lokale Variable des Thread gesetzt werden, der für den User erstellt wurde.
Und muss ich den Thread erst pausieren, bevor ich die Variable setzen kann?

Danke und Gruß

StuffM

SirThornberry 12. Okt 2004 21:15

Re: TThread - Variable zur Laufzeit ändern
 
Du musst das ganze in eine CriticalSection setzen um sicherzustellen das der Thread nicht auch gerade auf die Variable zugreift. Ansonsten ist es egal wieviel Threads du laufen hast da du ja Threadinstanze.Variable setzt und somit auch die Werte in jedem Thread getrennt sind.

Unplugged 12. Okt 2004 21:23

Re: TThread - Variable zur Laufzeit ändern
 
ich verstehe nicht ganz, wie ich die Instanz des Threads unterscheiden soll, weil der Aufruf erfolgt wiefolgt:

Delphi-Quellcode:
   with TMyThread.Create(True) do
   begin
     FreeOnTerminate := True;
     Resume;
   end;
Wenn ich das mehrfach aufrufe, ist laut nem kleinen Test von mir, der Thread auch mehrfach gestartet. Aber da könnte ich ihn ja nicht unterscheiden?

alcaeus 12. Okt 2004 21:41

Re: TThread - Variable zur Laufzeit ändern
 
Hi StuffMasterz,

in dem Fall musst du ein array of TMyThread erstellen, und die Ergebnisse des Creates ins array speichern.

also z.B.:
Delphi-Quellcode:
var
  MeinArray: array of TMyThread;
begin
  SetLength(MeinArray, Length(MeinArray)+1);
  MeinArray[Length(MeinArray)-1] := TMyThread.Create(True);
  with MeinArray[Length(MeinArray)-1] do
  begin
    FreeOnTerminate := True;
    Resume;
  end;
Anschließend kannst du auch auf die einzelnen Threads zugreifen. Die Behandlung des Arrays mit den einzelnen Threadelementen musst du aber selbst vornehmen.

Greetz
alcaeus

Unplugged 13. Okt 2004 05:14

Re: TThread - Variable zur Laufzeit ändern
 
Hätt ich eigentlich auch selbst drauf kommen können :roll:

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz