AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

probleme mit threads

Ein Thema von nailor · begonnen am 3. Aug 2004 · letzter Beitrag vom 8. Aug 2004
Antwort Antwort
Seite 2 von 3     12 3      
NicoDE
(Gast)

n/a Beiträge
 
#11

Re: probleme mit threads

  Alt 3. Aug 2004, 21:22
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 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...
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#12

Re: probleme mit threads

  Alt 3. Aug 2004, 21:28
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...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#13

Re: probleme mit threads

  Alt 3. Aug 2004, 21:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#14

Re: probleme mit threads

  Alt 4. Aug 2004, 01:08
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
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: probleme mit threads

  Alt 4. Aug 2004, 15:58
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#16

Re: probleme mit threads

  Alt 4. Aug 2004, 17:53
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
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#17

Re: probleme mit threads

  Alt 4. Aug 2004, 18:22
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.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: probleme mit threads

  Alt 4. Aug 2004, 19:32
Delphi-Referenz durchsuchenMessageDlg ist auch eine VCL-Form. MSDN-Library durchsuchenmessagebox ist die Messagebox von Windows direkt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#19

Re: probleme mit threads

  Alt 4. Aug 2004, 20:37
ich hab schon kapiert. alle dialoge werden jetzt so ersetzt, dass sie keinen stopp des haupt-threads mehr erzwingen
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#20

Re: probleme mit threads

  Alt 4. Aug 2004, 22:20
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?
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz