![]() |
IdTCPClient in eigenem Thread
Liste der Anhänge anzeigen (Anzahl: 1)
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 (
Delphi-Quellcode:
über Synchronize ab.
NotifyJPEGReceived(Data: TMemoryStream);
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:
Zitat:
Zitat:
Zitat:
|
AW: IdTCPClient in eigenem Thread
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?
|
AW: IdTCPClient in eigenem Thread
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? |
AW: IdTCPClient in eigenem Thread
Zitat:
Ist es ein exotisches Betriebssystem wie Windows 95? Was passiert wenn man WSAStartup direkt im Projektcode aufruft? Siehe auch: ![]() Es gibt zwei verschiedene Funktionen namens WSAStartup, in WinSock und in Indy ... |
AW: IdTCPClient in eigenem Thread
Zitat:
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 =/ |
AW: IdTCPClient in eigenem Thread
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz