AGB  ·  Datenschutz  ·  Impressum  







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

Threads werden automatisch beendet

Ein Thema von der_boss · begonnen am 19. Aug 2005 · letzter Beitrag vom 20. Aug 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#11

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 12:47
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?
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#12

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 12:52
Zitat von der_boss:
Delphi-Quellcode:
while(true) do begin
  while not terminated do begin
  end;
  suspend;
end; // forever
Der kommt aus der inneren Schleife nicht mehr raus, warum sollte das also funzen?
Nachtrag: Du wolltest doch den Thread quasi nur nach jedem Schleifendurchgang schlafenlegen? Dann mach's wie ich es oben gezeigt habe.

Zitat von BlackJack:
aber mal ne ganz andere frage: wo kann man im Taskmanager denn sehen, wie viele Threads ein Programm benutzt?
Kannst du als Spalte auswählen. Noch besser ist aber der Process Explorer.
  Mit Zitat antworten Zitat
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#13

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 13:03
Also, hier der Text des Threads:

Delphi-Quellcode:
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;
Ich hab jetzt FreeOnterminate:=true gesetzt. Und create nen neuen Thread, wenn die Messung/der Thread wieder aufgenommen werden sollen.
Seht ihr noch ne andere Möglichkeit den Thread am Ende der Schleife zu unterbrechen und von dort wieder loslaufen zu lassen?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#14

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 13:09
Zitat von der_boss:
Seht ihr noch ne andere Möglichkeit den Thread am Ende der Schleife zu unterbrechen und von dort wieder loslaufen zu lassen?
Nein, habe sie nur mehrfach oben erwähnt. Danke für's ignorieren - so macht helfen Spaß
  Mit Zitat antworten Zitat
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#15

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 14:44
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!!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 14:56
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]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
der_boss

Registriert seit: 10. Sep 2004
Ort: Dresden
27 Beiträge
 
Delphi 6 Professional
 
#17

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 15:04
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
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 15:17
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;
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#19

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 20:31
Zitat von der_boss:
danke, olli, aber leider kann ich nicht suspend benutzen, da der eine befehl erst vollständig abgearbeitet werden muss.
Wieso? Der Thread legt sich doch selber schlafen. Er ist also wirklich erstmal eine Runde durchgegangen und dann legt er sich selber schlafen. Also kannst du es doch so einrichten, daß vor dem Suspend aber innerhalb der Schleife alles erledigt wird.

Zitat von der_boss:
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?
Ohne Synchronisation geht das nicht. Selbst bei einem DWORD-Wert solltest du synchronisieren, das geht aber auch leichter als über Critical Sections oder so.

Zitat von der_boss:
der langsamere (Messung) soll weiterlaufen, ohne unterbrechung, während der schnellere fix die grafik aktualisiert. dazu muss ich ein paket (array of word) übergeben.
Benutz' eine Art Ringpuffer. Während der schnellere Thread immer wieder den aktuell unbenutzen Ringpufferteil ausliest, kann der langsamere Thread den nächsten Ringpufferteil beschreiben.

@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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#20

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 20:50
Um Threads zu synchronisieren, verwendet man Synchronisierungsobjekte, also Semaphoren, Mutexe, events etc. Schau mal in der OH oder in der WinAPI-Hilfe nach CreateSemaphore.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 20:09 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