AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TSemaphore

Ein Thema von youuu · begonnen am 19. Aug 2010 · letzter Beitrag vom 19. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2   
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

TSemaphore

  Alt 19. Aug 2010, 08:19
Delphi-Version: 2010
Hi,

ich möchte mehrere Threads starten, allerdings soll bei 10 gleichzeiigen Threads schluss sein, bis wieder einer abgearbeitet wurde und der nächste starten kann.

Nun habe ich gelesen das geht mit TSemaphore, kann mir jemand dazu ein Beispiel zeigen?
Steven
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#2

AW: TSemaphore

  Alt 19. Aug 2010, 08:41
Du solltest nicht immer die Threads anlegen und dann nach der Aufgabe zerstören. Wenn du einmal 10 Threads erzeugst und die dann in einem Pool die Arbeiten erledigen lässt sparst du dir viel Overhead.

Schau dir mal das an: http://www.delphipraxis.net/93835-wo...ntergrund.html
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#3

AW: TSemaphore

  Alt 19. Aug 2010, 10:56
Habe ich mir gerade angesehen und schaut sehr gut aus, habe allerdings noch eine Frage dazu und zwar wie kann ich dem Thread eine Variable mit geben, beim OnCreate Ereignis?
Steven
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: TSemaphore

  Alt 19. Aug 2010, 11:00
genau, fast richtig. natürlich nicht im OnCreate sondern beim Create (Constructor-Aufruf). Einfach einen neuen Constructor anlegen und dem die Parameter übergeben. Im Constructor kannst du die übergebenen Parameter dann in private-Varialben etc. speichern.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#5

AW: TSemaphore

  Alt 19. Aug 2010, 11:51
Ach stimmt, oh man ich Pfeiffe
Steven
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#6

AW: TSemaphore

  Alt 19. Aug 2010, 13:04
Ach stimmt, oh man ich Pfeiffe

Edit: Hm irgendwie klappt das nicht.

Ich bekomm dann immer als Fehler: E2008 Inkompatible Typen Hier:
Delphi-Quellcode:
Constructor TSampleJob.Create(kat: integer; sl2: THashedStringList; slOld2: THashedStringList);
Begin
  Inherited; // <<<----- E2008 Inkompatible Typen
  Synchronized := False;
  o := kat;
  sl.AddStrings(sl2);
  slOld.AddStrings(slOld2);
End;
HauptThread sieht dann so aus
Delphi-Quellcode:
  TWorkerThreadJob = Class
  private
    fSynchronized: Boolean;
    fUsesCOMObjects: Boolean;
    fo: integer;
    fsl, fslOld: THashedStringList;
  protected
    Procedure Execute(aThread: TWorkerThread); virtual; abstract;
    Property UsesCOMObjects: Boolean read fUsesCOMObjects write fUsesCOMObjects default False;
    Property Synchronized: Boolean read fSynchronized write fSynchronized default True;
    Property o: Integer read fo write fo;
    Property sl: THashedStringList read fsl write fsl;
    Property slOld: THashedStringList read fslOld write fslOld;
  End;
Damit wollte ich es testen, aber wie gesagt bekam ich diese Fehlermeldung.
Steven
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: TSemaphore

  Alt 19. Aug 2010, 13:13
Dein Konstruktor hat andere Parameter als der Konstruktor Create der Vorfahrklasse, da kannst Du nicht einfach inherited schreiben. Versuch es mit:

inherited create (Parameter für geerbte Createroutine)
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#8

AW: TSemaphore

  Alt 19. Aug 2010, 13:19
E2034 Zu viele Parameter

kommt dabei raus.
Steven
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#9

AW: TSemaphore

  Alt 19. Aug 2010, 13:33
Was ist der Vorfahr von TSampleJob? Wie schaut die Deklaration der entsprechenden (geerbten) Create Routine aus? Und welche Parameter hast Du jetzt an inherited create übergeben?
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#10

AW: TSemaphore

  Alt 19. Aug 2010, 13:51
Delphi-Quellcode:
Type
// Beispiel, das die Verwendung der synchronize-Methode demonstriert,
// um Ausgaben unter Verwendung der VCL threadsicher vorzunehmen.
  TSampleJob = Class(TWorkerThreadJob)
    fMessage: String;
    Procedure DoShow;
  public
    Constructor Create(kat: integer; sl2: THashedStringList; slOld2: THashedStringList);
    Procedure Execute(aThread: TWorkerThread); override;
  End;
Delphi-Quellcode:
  TWorkerThreadJob = Class
  private
    fSynchronized: Boolean;
    fUsesCOMObjects: Boolean;
    fo: integer;
    fsl, fslOld: THashedStringList;
  protected
    Procedure Execute(aThread: TWorkerThread); virtual; abstract;
    Property UsesCOMObjects: Boolean read fUsesCOMObjects write fUsesCOMObjects default False;
    Property Synchronized: Boolean read fSynchronized write fSynchronized default True;
    Property o: Integer read fo write fo;
    Property sl: THashedStringList read fsl write fsl;
    Property slOld: THashedStringList read fslOld write fslOld;
  End;
sollte der vorfahre sein.
Steven
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf