![]() |
Re: Threads werden automatisch beendet
poste am besten mal ein bisschen code, vor allem die stellen, an denen die Threads erstellt, gestartet, beendet und wieder freigegeben werden.
aber mal ne ganz andere frage: wo kann man im Taskmanager denn sehen, wie viele Threads ein Programm benutzt? |
Re: Threads werden automatisch beendet
Zitat:
Nachtrag: Du wolltest doch den Thread quasi nur nach jedem Schleifendurchgang schlafenlegen? Dann mach's wie ich es oben gezeigt habe. Zitat:
|
Re: Threads werden automatisch beendet
Also, hier der Text des Threads:
Delphi-Quellcode:
Ich hab jetzt FreeOnterminate:=true gesetzt. Und create nen neuen Thread, wenn die Messung/der Thread wieder aufgenommen werden sollen.
procedure Mythread.Execute;
var fehlerzaehler:integer; instream,weitergabe:tArray; begin SetName; fehlerzaehler:=0; setlength(instream,0);setlength(instream,c_laen); setlength(weitergabe,0);setlength(weitergabe,c_laen); while not terminated do begin if UsbParIn(c_DevNum,instream,c_laen) then begin fehlerzaehler:=instream[0]; weitergabe:=instream; //DarstThread.Resume; end else begin inc(fehlerzaehler); if fehlerzaehler=3 then begin Synchronize(Neu_beginnen); //hauptform benachrichtigen end; end; { Thread-Code hier einfügen } end; ReturnValue:=3; end; Seht ihr noch ne andere Möglichkeit den Thread am Ende der Schleife zu unterbrechen und von dort wieder loslaufen zu lassen? |
Re: Threads werden automatisch beendet
Zitat:
|
Re: Threads werden automatisch beendet
danke, olli, aber leider kann ich nicht suspend benutzen, da der eine befehl erst vollständig abgearbeitet werden muss.
Ich habe das Problem jetzt anders gelöst, nun steht aber ein neues: wie würdet ihr denn dem einen thread, der schneller ist, von einem langsameren thread ein datenpaket konfliktfrei übermitteln, ohne dass der langsamere dazu angehalten oder synchronisiert werden muss? der langsamere (Messung) soll weiterlaufen, ohne unterbrechung, während der schnellere fix die grafik aktualisiert. dazu muss ich ein paket (array of word) übergeben. Danke, euch fleiß'gen Helfern!! |
Re: Threads werden automatisch beendet
mir kommt es so vor als ob du nicht ganz verstehst was ein Thread ist bzw. wie er funktioniert. Es macht absolut keinen Sinnn innerhalb eine Threads suspend aufzurufen. Denn wenn man einen Thread schlafen schickt dann läuft dieser nicht und kann somit nicht suspend aufrufen, das suspend muss also wenn dann von außerhalb aufgerufen werden.
Und einen Thread am Ende der schleife anhalten kannst du ganz einfach mit sleep und ähnlichen Funktionen... [Edit]Der Inhalt des Beitrages ist falsch!! Ich hatte Suspend mit Resume verwechselt[/Edit] |
Re: Threads werden automatisch beendet
hey, kann sein, dass ich nicht alles verstehe, aber das wolltest du mir nicht vorwerfen, oder?
hast du nicht lieber eine lösung, für mein problem, "quasiparallele abarbeitung" der Messwerterfassung und Grafikaktualisierung? die messwerte müssen ja dazu an den thread "grafikaktualisierung" übermittelt werden, der dann die daten auch auf die platte schmeißt. ?? Danke dir, Sir |
Re: Threads werden automatisch beendet
du holst dir einfach jede sekunde mit einem Timer in deinem Hauptprogramm die Daten und zeichnest aus denen das Diagramm. und wenn die Messungen sehr zeitkritsch sind, lässt du die halt weiterhin in einem thread machen.
also so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var Daten: TDaten; begin Daten := RechenThread.GetDaten; Self.DrawDiagram(Daten); end; |
Re: Threads werden automatisch beendet
Zitat:
Zitat:
Zitat:
@BlackJack: a.) geht auch das nicht ohne Synchronisation, b.) bitte keine Timer. Wenn er schon Threads benutzt, dann auch konsequent. Da wären Timer nur Ressourcenverschwendung. |
Re: Threads werden automatisch beendet
Um Threads zu synchronisieren, verwendet man Synchronisierungsobjekte, also Semaphoren, Mutexe, events etc. Schau mal in der OH oder in der WinAPI-Hilfe nach CreateSemaphore.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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