AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi warten bis Thread keine Jobs mehr hat.....
Thema durchsuchen
Ansicht
Themen-Optionen

warten bis Thread keine Jobs mehr hat.....

Ein Thema von Thomas83 · begonnen am 30. Okt 2008 · letzter Beitrag vom 31. Okt 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 30. Okt 2008, 16:16
Variablen (also dessen Inhalt) solltest du im Constructor übergeben (Dafür ist er ja da)
Aber so Threadrelevante Dinge, wie Fenster oder Timer erstellen müssen in execute.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#12

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 30. Okt 2008, 16:34
jup so habe ich es jetzt auch gemacht.....
jetzt merke ich auch erst das alle Threads gleichzeitig laufen bzw. arbeiten
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#13

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 30. Okt 2008, 17:05
eine frage hätte ich da noch.....

wenn sich ein client beendet wird im thread ondisconnect ausgelöst per syn wird eine methode in der mainform aufgerufen..... wenn ich einen client beende und der inhalt von disconnect wird ausgelöst, friert meine anwendung manchmal ein..... wenn ich den code rausnehme ohne probleme.....

dort werden dann auch daten an einen anderen thread übergeben.... kann es sein das meine threads sich irgend wie stören oder ich zu viele syn methoden eingebaut habe.....

debuggen ist auch nicht gerade einfach.....
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#14

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 06:45
vielleicht sind die ganzen TCriticalsection mein Problem....
Maches zur Zeit so ...
Delphi-Quellcode:
TMeinThread1 = class(TThread)
private
  cs : TCriticalsection;
public
  Procedure IrgendEine(str : string);
end;

TMeinThread1.IrgendEine(str : string);
begin
  cs.enter
  try
    flist.add(str); //<- TStringList;
  finally
    cs.leave;
  end;
end;

TMeinThread2 = class(TThread)
private
  meinthread1 : TMeinThread1;
  cs : TCriticalsection;
  fOnProcedure : TProcedure;
public
  Procedure IrgendEine;
  Property OnProcedure : TProcedure read fOnProcedure write fOnProcedure;
  Property MeinThread1 : TMeinThread1 read meinthread1;
end;

TMeinThread2.IrgendEine;
begin
  //mach was
  synchronize(fOnProcedure);
  //mach noch was
end;

//Main
//...
  fMeinThread2.onProcedure := onMeineProcedure;
//...

TFrmMain.OnMeineProcedure;
begin
  fMeinThread2.MeinThread1.add('text');
  //noch irgend was....
end;
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#15

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 07:41
habe jetzt noch ein paar test gemacht.....
ich meine ich habe den fehler gefunden.

In einigen Threads deklariere ich die variable für die TCriticalsection unter private der Klasse.
Wenn ich aber in der Methode selber eine cs erstelle und freigebe habe ich keine Probleme, so sieht es nach einem Test zumindestens aus....
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 07:45
Du darfst nur eine CS für alle Threads haben (bzw. alle die sich zusammen synchronisieren müssen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#17

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 07:48
jetzt verstehe ich gar nichts mehr, bzw. habe ich es überhaupt verstanden
Das heist ich müste eine globale cs für alle Threads haben....

hmmmm
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 07:59
Für die Threads, welche du gegenseitig synchronisiewren willst, weil du auf dieselben Variablen zugreifst, ja.

Du kannst natürlich mehrere CS haben. Für jede Variable, die du in mehreren Threads nutzt je eine. Oder eben eine für alle.

Global definieren geht, ist aber nicht ganz OOP. Du kannst sie auch von dem einen Thread zum anderen im Constructor o.ä. übergeben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 08:04
Zitat von sirius:
Global definieren geht, ist aber nicht ganz OOP. Du kannst sie auch von dem einen Thread zum anderen im Constructor o.ä. übergeben.
Hier wäre eine pragmatische Lösung ('Scheiss auf OOP') allerdings wesentlich einfacher und klarer.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: warten bis Thread keine Jobs mehr hat.....

  Alt 31. Okt 2008, 08:11
Zitat von alzaimar:
Zitat von sirius:
Global definieren geht, ist aber nicht ganz OOP. Du kannst sie auch von dem einen Thread zum anderen im Constructor o.ä. übergeben.
Hier wäre eine pragmatische Lösung ('Scheiss auf OOP') allerdings wesentlich einfacher und klarer.
Ja, schon. Borland hat es ja in seinen Komponenten schön vorgemacht mit den globalen Variablen, gerade bei CS.
Aber was machst du, wenn du mehrere Threads startest (aus verschiedenen Instanzen)?
Ich habe meistens einen kleinen kurzen Thread, den ich starte. Dem übergebe ich sowieso zwei, drei Variablen. Da kann ich ihm auch noch die CS übergeben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 08:05 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