Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi probleme mit threads (https://www.delphipraxis.net/27059-probleme-mit-threads.html)

NicoDE 3. Aug 2004 20:22

Re: probleme mit threads
 
Zitat:

Zitat von nailor
über ne exception zu testen, ob was noch da ist...

Eben das sollst Du ja nicht machen :)
Sieh Dir mal FreeOnTerminate und OnTerminate an (letzteres wird IIRC mit dem Haupt/VCL-Thread synchronisiert).

Zitat:

Zitat von nailor
von einem locking objekt hab ich keine ahnung.

Es gibt kein Locking-Objekt (ok, es gibt fertige Objekte in der Delphi-RTL dafür). Ich meinte damit nur, dass man den gemeinsamen Zugriff auf eine Variable durch was auch immer (Locking :)) synchronisieren muss. Entweder man benutzt dafür eine fertige Klasse (Namen vergessen) oder bei Integern die Win32 API-Funktionen InterlockedExchange und Konsorten...

nailor 3. Aug 2004 20:28

Re: probleme mit threads
 
terminate: werd mir was einfallen lassen

locking: am anfang um den thread zu initialisieren werde ich mir wohl über "synchronize" ein paar daten aus dem hauptprogramm ziehen. der rest (eine gelegentliche rückmeldung) sollte über interlockXXX klappen. allerdings erklär mir mal einer den sinn hiervon:

Zitat:

InterlockedIncrement (Funktion)

Die Funktion inkrementiert zwei Integer-Werte thread-sicher.

Unit

SysUtils

Kategorie

Thread-Verwaltung

Delphi-Syntax:

function InterlockedIncrement(var I: Integer): Integer;

C++ Syntax:

extern PACKAGE int __fastcall InterlockedIncrement(int &I);

Beschreibung

InterlockedIncrement inkrementiert die in I übergebene Variable so, dass während dieser Operation kein Zugriff durch andere Threads möglicht ist. Der Rückgabewert hat dasselbe Vorzeichen wie das inkrementierte Ergebnis, aber nicht zwangsläufig einen identischen Wert.

Die in der Unit SysUtils definierte Funktion InterlockedIncrement ist nur unter Linux verfügbar. Unter Windows verwenden Anwendungen die Win32-API mit demselben Namen.
ich glaub ich mach jetzt schluss für heute. oder zumnidest mal pause...

NicoDE 3. Aug 2004 20:38

Re: probleme mit threads
 
Zitat:

Zitat von nailor
allerdings erklär mir mal einer den sinn hiervon

Die Funktion gibt den, um eins, erhöhten Wert zurück.
Da auch ein anderer Thread der Variable gerade Inkrementieren kann, ist nach folgendem Code (der nicht nur Nachahmung empfohlen ist!):
Delphi-Quellcode:
if i = 42 then
  i := InterlockedIncrement(i);
...der Wert von i nicht zwangsläufig 43.

Kurz, Du kannst keine Annahmeen über den Wert machen - und solltest/kannst nur die Interlocked-Funktionen zum Auslesen/Setzen verwenden.

nailor 4. Aug 2004 00:08

Re: probleme mit threads
 
:wall: so, hab jetzt ne in meinen augen zum fortschritt übermitteln sehr schöne methode gefunden: ich feuer einfach von zeit zu zeit ne windowsmessage ab, nach dem motto

PostMessage(mainhandle, WM_USER, bla, blubb);

da es sich ja nicht um daten handelt, mit denen zeitkritisch weitergearbeitet werden soll, sondern nur der förmliche antrag an die hauptform mal ne progressbar nen stück rüberzuschieben, glaube ich ist das so ziemlich gut.

nailor

Luckie 4. Aug 2004 14:58

Re: probleme mit threads
 
Und as mit dem "Leinwand erlaubt kein zeichen" liegt an der VCL, da selbige nicht threadsafe ist. Ersetz mal dein ShowMessage durch MSDN-Library durchsuchenMessagebox, dann sollte es gehen.

Sanchez 4. Aug 2004 16:53

Re: probleme mit threads
 
Zitat:

Zitat von Luckie
Und as mit dem "Leinwand erlaubt kein zeichen" liegt an der VCL, da selbige nicht threadsafe ist. Ersetz mal dein ShowMessage durch MSDN-Library durchsuchenMessagebox, dann sollte es gehen.

Wie es bereits in meinem ersten Post dieses Threads geschrieben steht :mrgreen:

nailor 4. Aug 2004 17:22

Re: probleme mit threads
 
stimmt schon. das gleiche scheint auch noch für so nen kram wie MessageDlg und konsorten zu gelten. aber das eigentliche problem (welches sich mittlerweile in wohlgefallen aufgelöst hat) muss ein anderes gewesen sein, da ich die showmessages nur zum debuggen eingebaut hatte.

so langsam find ich mich in die DOs und DONTs der threaderei hinein.

Luckie 4. Aug 2004 18:32

Re: probleme mit threads
 
Delphi-Referenz durchsuchenMessageDlg ist auch eine VCL-Form. MSDN-Library durchsuchenmessagebox ist die Messagebox von Windows direkt.

nailor 4. Aug 2004 19:37

Re: probleme mit threads
 
ich hab schon kapiert. alle dialoge werden jetzt so ersetzt, dass sie keinen stopp des haupt-threads mehr erzwingen

nailor 4. Aug 2004 21:20

Re: probleme mit threads
 
problem: ich brauch ne messagebox mit:

Code:
ja
nein
ja zu allen
nein zu allen
das windows-dingen bietet nur

Code:
MB_ABORTRETRYIGNORE   The message box contains three push buttons: Abort, Retry, and Ignore.
MB_OK   The message box contains one push button: OK. This is the default.
MB_OKCANCEL   The message box contains two push buttons: OK and Cancel.
MB_RETRYCANCEL   The message box contains two push buttons: Retry and Cancel.
MB_YESNO   The message box contains two push buttons: Yes and No.
MB_YESNOCANCEL   The message box contains three push buttons: Yes, No, and Cancel.
das ist zu wenig. wie mach ich mir das jetzt am einfachsten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Seite 2 von 3     12 3      

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