Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 00:04

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

bei den Indy TCP/IP Komponenten funktioniert ja alles mit Threads...
Also beim Server z.B. bekomtm jeder Client der Connected einen eigenen Thread etc.

Kann man das irgendwie so einstellen das es wie eine art Warteschleife wird??? Also wenn 4 Clienten gleichzeitig was wollen, das die in ner Warteschleife laden und nacheinander abgearbeitet werden???

Au'revoir,
Aya~

PS: Oder wenn das mit den Indy Kompos nich geht, gibt es andere gute TCP/IP Komponenten?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 12:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du kannst dort ganz einfach eine Critical Section einbauen. Siete Tutorial Multithreading.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 14:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ok.. klingt schonmal super :)
is das z.B. so richtig?? ->

Code:
  1. procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
  2. begin
  3.   CriticalSection.Enter;
  4.   try
  5.     Parse(AThread.Connection.ReadLn);
  6.   finally
  7.     CriticalSection.Leave;
  8.   end;
  9. end;


in Parse wird halt das was der Server empfängt ausgeführt... is das richtig so???

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 15:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Kann nich gestimmt haben, Parse() wird überhauptnemmer aufgerufen... :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 15:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wenn alle Threads auf ein und die selbe CriticalSection zugreigen ist das 100 pro richtig.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Setzt mal einen Haltepunkt in die IdTCPServer1Execute. Ganz oben. Wird überhaupt das aufgerufen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 15:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Lossy eX hat geschrieben:
Setzt mal einen Haltepunkt in die IdTCPServer1Execute. Ganz oben. Wird überhaupt das aufgerufen?

Ja, klar.. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 15:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
ah halt... beep :)
Hab das TCriticalSection.Create vergessen :rolleyes:

Werd nachher mal den extrem test machen und schauen ob's klappt ;)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 16:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

bin nochnet zu gekommen es zu testen da hier grad alle Pause machen etc und ich nich an 7 PCs in 7 Räumen gleichzeitig Enter drücken kann :D

Aber nur mal grad zur Theorie.. das ich das richtig verstehe...

Wenn der Thread auf die CriticalSection trifft die gerade geschützt ist.. dann bleibt er in ner warteschleife, solange bis er reinkann, ja???

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 16:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Japp. Das siehst du vollkommen richtig. Der Erste der die CriticalSection betritt ist der Glückliche. Alle anderen Blockieren und warten bis die CritSect wieder verlassen wurde. Ist das der Fall kommt der nächste dran.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2003 18:10 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
TCriticalSection ist eine schlechte Wahl, da die Zeit zwischen dem Enter und Leave einer CriticalSection so kurz wie möglich sein soll. Besser ist es mit Semaphoren zu arbeiten oder mit ThreadVar, welche auf einen bestimmten Wert gesetzt wird.

Beispiel:

Code:
  1.  
  2. ThreadVar ActiveConnection : TObject;
  3.  
  4. procedure Thread.Execute;
  5. begin
  6. while (ActiveConnection <> Self) do begin
  7.  &nbsp;while (ActiveConnection <> Self) do Sleep(10);
  8.  &nbsp;CriticalSection.Enter;
  9.  &nbsp;try
  10.  &nbsp; &nbsp;if (ActiveConnection = nil) then begin
  11.  &nbsp; &nbsp; &nbsp;ActiveConnection := Self;
  12.  &nbsp; &nbsp;end;
  13.  &nbsp;finally
  14.  &nbsp; &nbsp;CriticalSection.Leave;
  15.  &nbsp;end;
  16.  &nbsp;// Hier Abarbeitungscode des Threads im Server
  17. end;
  18.  


Damit wird eine Serialisierung der Threadanforderungen durchgeführt.

Eine andere Lösung ist, das der erste Thread eine Variable auf True setzt, das keine weiteren Verbindungen erwünscht sind. Kommen jetzt Verbindungsabfragen herein werden diese abgelehnt und die Verbindung sofort wieder zurück gesetzt. Ist nun die erste Verbindung fertig, setzt Sie die Variable auf False und so kann der nächste Client sich anmelden.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 17 Queries | GZIP : On ]