AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy10 IdTCPServer Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Indy10 IdTCPServer Problem

Ein Thema von ASKtec · begonnen am 9. Nov 2008 · letzter Beitrag vom 9. Nov 2008
Antwort Antwort
Seite 2 von 2     12   
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#11

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 16:43
Hmm, eigentlich sollen sich mal später zwischen 20 und 30 Clients verbinden können ohne dass es Probleme gibt...

Wie benutze ich denn die gleiche CriticalSection nochmal? Einfach zu Beginn und am Ende ein Enter und ein Leave aufrufen?

@omata
Welches Log-Objekt meinst Du? Das Memo oder das Logfile das ich jetzt eingebaut habe?

Wie komme ich denn nun weiter um das ganze stabil zum laufen zu bekommen?

Danke nochmal und viele Grüße
Andreas
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 16:46
Zitat von ASKtec:
Wie benutze ich denn die gleiche CriticalSection nochmal? Einfach zu Beginn und am Ende ein Enter und ein Leave aufrufen?
ja

Zitat von ASKtec:
@omata
Welches Log-Objekt meinst Du? Das Memo oder das Logfile das ich jetzt eingebaut habe?
Das Objekt, das "Log" heisst, das ist doch auch schon im ersten Post zu sehen.
  Mit Zitat antworten Zitat
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#13

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 16:54
ok, wäre es dann vielleicht sinnvoll immer zu Beginn des Serverevents die CriticalSection zu beginnen und damit die anderen Threads warten zu lassen???

Oder bringt das wieder andere Probleme?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 17:06
Ja entweder so, oder die schützt deinen Zugriff jeweils einzeln, damit nicht immer alle überall ausgesperrt werden.
Bau also einen Wrapper für das Log und schütze die Zugriffe auf dieses mit einem Kristischen Abschnitt und den Zugriff auf deine visuelle Komponente schützt du dann mit einem anderen Kritischen Abschnitt.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#15

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 17:58
Zitat von omata:
Die VCL ist nicht Threadsicher, benutze deshalb Kritische Abschnitte.

Delphi-Quellcode:
uses ..., SyncObjs;

type
  :
  private
    { Private-Deklarationen }
    FCriticalSection:TCriticalSection;
  :
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FCriticalSection:=TCriticalSection.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FCriticalSection.free;
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
:
begin
  :
  FCriticalSection.Enter;
  try
    ListView1.Clear;
    List := IdTCPServer1.Contexts.LockList;
    for i := 0 to List.Count - 1 do begin
      TidContext(List.Items[i]).Connection.IOHandler.WriteLn(text);
      with Listview1.Items.Add do
        caption := TIdContext(List.Items[i]).Connection.Socket.Binding.PeerIP;
    end;
    IdTCPServer1.Contexts.UnlockList;
  finally
    FCriticalSection.Leave;
  end;
end;

Ist so auch nicht richtig, du _darfst_ nur aus dem Mainthread auf Elemenate der VCL zugreifen. Das geht mittels Synchronize.

Win32.API
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 18:04
Zitat von Win32.API:
Ist so auch nicht richtig, du _darfst_ nur aus dem Mainthread auf Elemenate der VCL zugreifen. Das geht mittels Synchronize.
Und wie willst du dann an die Informationen aus AContext rankommen?
  Mit Zitat antworten Zitat
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#17

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 20:47
Hallo,

so wie es im Moment aussieht habe ich es nun geschafft dass es funktioniert. Ich habe für das schreiben der Logdatei eine Prozedur angelegt und dort eine eigene CriticalSection am Anfang und am Ende eingefügt.

Im OnExecute schaue ich dann erst nach dem Kommando. Dann kapsele ich beim richtigen Kommando in einer eigenen CriticalSection den weiteren Ablauf.

Zum testen habe ich eben mal einen Art Chatclient mit einem Timer, der jede Sekunde eine Zufallsnachricht an den Server schickt, programmiert und davon mal 10 Stück auf den Server losgelassen. Dabei ist nichts aus dem Ruder gelaufen.

Nun habe ich den Server da laufen wo er hin soll... in ca. 1 Stunde weiß ich dann mehr.

Gruß und Danke an alle die mir hier geholfen haben

Andreas
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#18

Re: Indy10 IdTCPServer Problem

  Alt 9. Nov 2008, 22:26
Zitat von omata:
Zitat von Win32.API:
Ist so auch nicht richtig, du _darfst_ nur aus dem Mainthread auf Elemenate der VCL zugreifen. Das geht mittels Synchronize.
Und wie willst du dann an die Informationen aus AContext rankommen?

Wie schon gesagt: Mit Synchronize kann man eine Funktion im Kontext des Mainthreads ausfuehren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:18 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