AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Ein TServerSocket, mehrere Threads - wie???
Thema durchsuchen
Ansicht
Themen-Optionen

Ein TServerSocket, mehrere Threads - wie???

Ein Thema von romber · begonnen am 11. Sep 2005 · letzter Beitrag vom 12. Sep 2005
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Ein TServerSocket, mehrere Threads - wie???

  Alt 11. Sep 2005, 15:32
Hallo!

Ich habe einen TServerSocket auf der Form, dann laufen in der Hintergrund mehrere Threads, die relativ oft auf diesen ServerSocket zugraifen müssen. Ich verwende bereits Synchronize() dort, wo auf den Socket zugegrifen wird, doch es klappt irgendwie nicht richtig. Ich habe bemerkt, dass wenn mehrere Threads zu der selben Zeit Daten mit dem ServerSocket verschicken möchten, hangt sich das Programm auf.

Gibt es eine bessere Methode, von mehreren Threads auf ein TServerSocket zugreifen?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Ein TServerSocket, mehrere Threads - wie???

  Alt 11. Sep 2005, 15:35
Delphi-Referenz durchsuchenTCriticalSection dürfte dein Problem lösen

  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Ein TServerSocket, mehrere Threads - wie???

  Alt 11. Sep 2005, 18:30
Mit TCriticalSection hängt sich das Programm nicht mehr auf, jedoch werden nicht alle Datensätze übertragen.
Die Problematik der Sache ist folgende: sehr oft, genauer gesagt fast immer, greifen die Threads fast gleichzeitig auf den ServerSocket und die Daten werden nicht nur an einen Client verschickt, sondern in der Schleife an alle verbundenen Clients. Ich denke, diese Übertragung in der Schleife braucht Zeit und irgendwas wird da blockiert, so dass nicht alle Threads an den Socket wirklich rankommen... Keine Ahnung.

Noch Ideen? Ich überlege mir jetzt, eine Art "Zwischenspeicher" aufzubauen, auf den der Socket regelmäßig, z.B. mit einem Timer oder so, zugreift und leert, indem die gesammelten Daten verschickt werden. Ich habe aber noch keine gewisse Vorstellung wie so was aussehen könnte. Es muss aber richtig schnell sein. Hatte jemand schon so was gemacht?
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Ein TServerSocket, mehrere Threads - wie???

  Alt 11. Sep 2005, 22:39
Ich habe gerade ohne Synchronize() und ohne TCriticalSection versucht. Es hat sich nicht aufgehängt und komischerweise wurden mehr Datensätze übertragen, als mit TCriticalSection.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Ein TServerSocket, mehrere Threads - wie???

  Alt 12. Sep 2005, 14:29
Und ich glaube du programmierst Müll Allein durch die Verwendung einer Critical Section ändert sich nämlich absolut nichts am Programmablauf, ausser dass verhindert wird dass mehrere Threads gleichzeitig auf ein Objekt oder was immer zugreifen, was sie keinesfalls dürfen.

Wenn aber dann wie du sagst zu wenig Datensätze übertragen werden muss der Fehler ganz wo anders liegen.

  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: Ein TServerSocket, mehrere Threads - wie???

  Alt 12. Sep 2005, 18:55
Woran kann es denn liegen, dass nicht alle Datensätze ankommen?
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#7

Re: Ein TServerSocket, mehrere Threads - wie???

  Alt 12. Sep 2005, 19:08
vielleicht solltest du dir überlegen einen patch thread zu erstellen oder das hald im hauptprogramm zu machen, und nicht mehrere threads irgendwas verschicken lassen.
Mach einfach einen message Queue und lass die komponenten verschicken so schnell sie hald können.
Auch könntest du hier gleich messages zusammenfassen und damit größere Packete verschicken.

Irgendwie kommt mir das chaos von dem du mir da erzählst nicht sinnvoll vor

Arnulf
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:26 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