AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke IdTCPClient in eigenem Thread
Thema durchsuchen
Ansicht
Themen-Optionen

IdTCPClient in eigenem Thread

Ein Thema von Morphie · begonnen am 24. Sep 2013 · letzter Beitrag vom 24. Sep 2013
Antwort Antwort
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#1

IdTCPClient in eigenem Thread

  Alt 24. Sep 2013, 12:45
Hi,

vorab: ich habe noch nicht wirklich viel Erfahrung in der Thread-Programmierung, daher kann es sein, dass ich das Ganze auch komplett falsch angehe

Ich möchte ein Programm schreiben, das mir den MJPEG-Stream meiner Überwachungskamera(s) anzeigt.
Dazu habe ich mir eine Klasse TMJPEGClient geschrieben, welche von TThread abgeleitet ist.
Im OnExecute instanziiere ich ein TIdTCPClient, baue die Verbindung auf und empfange den Stream.
Sobald ein Frame empfangen wurde, feuere ich ein Event (NotifyJPEGReceived(Data: TMemoryStream); über Synchronize ab.

Im GUI-Thread wird dieses Event dann abgerufen und Data in einem Image-Control dargestellt.

Eigentlich funktioniert alles genau so wie ich es mir wünsche.
Aber:
Wenn ich das Programm einfach beende, während der Thread noch läuft, hagelt es Fehlermeldungen:
Zitat:
Im Projekt MJPEGTest.exe ist eine Exception der Klasse EIdSocketError mit der Meldung 'Socket-Fehler # 10093
' aufgetreten.
Zitat:
Im Projekt MJPEGTest.exe ist eine Exception der Klasse EIdWinsockStubError mit der Meldung 'Fehler beim Aufruf der Winsock2-Bibliotheksfunktion recv: Die Anwendung hat die Funktion WSAStartup nicht aufgerufen, oder bei dieser Funktion ist ein Fehler aufgetreten' aufgetreten.
Zitat:
Im Projekt MJPEGTest.exe ist eine Exception der Klasse EIdWinsockStubError mit der Meldung 'Fehler beim Aufruf der Winsock2-Bibliotheksfunktion WSAGetLastError: Die Anwendung hat die Funktion WSAStartup nicht aufgerufen, oder bei dieser Funktion ist ein Fehler aufgetreten' aufgetreten.
Zitat:
Im Projekt MJPEGTest.exe ist eine Exception der Klasse EIdWinsockStubError mit der Meldung 'Fehler beim Aufruf der Winsock2-Bibliotheksfunktion shutdown: Die Anwendung hat die Funktion WSAStartup nicht aufgerufen, oder bei dieser Funktion ist ein Fehler aufgetreten' aufgetreten.
Ich habe das Beispielprojekt mal angehängt... Hat jemand ne Idee, was ich hier falsch mache?
Angehängte Dateien
Dateityp: zip MJPEG.zip (81,3 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#2

AW: IdTCPClient in eigenem Thread

  Alt 24. Sep 2013, 13:55
Treten die Exceptions ausserhalb oder innerhalb der IDE (beim Debuggen) auf? Indy Exceptions können während des Debuggens deaktiviert werden. Die WASStartup-Exception dagegen läßt auf einen Bug schliessen. Ich würde die aktuelle Indy 10.6 Version verwenden, eventuell ist dieses Problem damit behoben. p.s. WSAStartup rufe ich in Indy-basierten Hintergrundthreads nicht auf. Wie wird der IdTCPClient denn konkret erzeugt und initialisiert?
Michael Justin
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#3

AW: IdTCPClient in eigenem Thread

  Alt 24. Sep 2013, 13:59
Socket-Fehler # 10093 tritt nur innerhalb der IDE auf, die anderen Fehler hingegen auch in der normalen *.exe...
Ich könnte sie ja einfach abfangen und ignorieren, allerdings entsteht durch diesen Fehler auch ein Memory-Leak

Ich nutze die Version 10.6.0.497 von XE4. Wo gibt es denn eine aktuellere?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#4

AW: IdTCPClient in eigenem Thread

  Alt 24. Sep 2013, 15:03
Socket-Fehler # 10093 tritt nur innerhalb der IDE auf, die anderen Fehler hingegen auch in der normalen *.exe...
Ich könnte sie ja einfach abfangen und ignorieren, allerdings entsteht durch diesen Fehler auch ein Memory-Leak

Ich nutze die Version 10.6.0.497 von XE4. Wo gibt es denn eine aktuellere?
10093 ist "Successful WSAStartup not yet performed.", passt gut zu den Exceptions.

Ist es ein exotisches Betriebssystem wie Windows 95?

Was passiert wenn man WSAStartup direkt im Projektcode aufruft?

Siehe auch: https://forums.embarcadero.com/messa...essageID=29029

Es gibt zwei verschiedene Funktionen namens WSAStartup, in WinSock und in Indy ...
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

AW: IdTCPClient in eigenem Thread

  Alt 24. Sep 2013, 15:09
Ist es ein exotisches Betriebssystem wie Windows 95?
Nee, Windows 7 und Windows 8...

Ich denke eher, dass es an meinem Code liegt, bzw. dass irgendwo in meinem Thread noch ein Fehler schlummert...
Denn eigentlich tut das Programm genau das, was es machen soll. Nur wenn ich die Anwendung beende und der Thread noch läuft, gibt es diese Fehler.

So als würde man Indy irgendwie den Boden unter den Füßen wegziehen... Aber ich kenne mich leider noch zu wenig mit der Thread-Programmierung aus, um selbst auf die Lösung zu kommen =/
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName
Online

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: IdTCPClient in eigenem Thread

  Alt 24. Sep 2013, 15:49
Warum beendest Du den thread nicht einfach und zerstörst alle Objekte darin bevor Du die Anwendung beendest? Einfach die abbruch variable auf True setzen, damit die execute schleife aufhört und dann das Thread objekt im main thread freigeben wenn geschlossen wird.
  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 18:23 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