![]() |
Thread. Thread zugriff verweigert 5. Was passiert da??
hi zusammen,
hoffe das ich hier richtig bin. Meine Client / Server Anwendung ist in eine Threadklasse. Jetzt habe ich zum Test einen Text vom Client zum Server, alle 10ms, gesendet und einen Text vom Server an alle Clients, alle 100ms,gesendet um zu testen wie stabil die Anwendung ist. Habe den Test über Nacht laufen lassen. Start 16 Uhr. Letzter Text am Server gegen 18 Uhr am gleichen Tag. Heute morgen war dann die Meldung "Thread zugriff verweigert (5)" Wie kann ich einen solchen Fehler finden? Weis ja nicht wo dran es liegt. Ist eine Exception in der Execute vom Thread aufgetreten und deswegen hat der Thread sich aufgehangen? .... thx |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
Wenn in einem Thread eine Exception auftritt, bekommst du dies ohne Exceptionbehandlung nicht mit. Der thread stürzt einfach ab. Ende.
Du kannst im Ereignis onTerminate die Eigenschaft FataException abfragen. Dann weißt du, was pssiert ist. (War es das was du fragtest?) |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
super danke, werde ich mal testen.
thx |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
Sobald mehrere Client's Daten an den Server senden und er diese in einer Liste verwaltet, musst du sicherstellen, dass nicht 2 Threads gleichzeitig in eine Liste / ein Memo schreiben können. Andersfalls kann es jeder Zeit zu Fehlern kommen.
Dies ist z.B. mit CriticalSections möglich. Schau dir mal die Klasse TThreadList aus der Classes-Unit an. Diese Kapselt die Klasse TList. Hier wird durch "LockList" und "UnlockList" die CriticalSection erzeugt/geschlossen. Leider sind die wenigsten Delphi-Klassen Threadsicher. Selbst IntToStr oder DateTimeToStr schreibt Intern die Werte in eine globale Variable. Dies kann auch zu Fehlern führen, wenn 2 Threads gleichzeitig diese Funktionen nutzen. |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
Aber der Server besteht doch nur aus einen Thread.
Wenn zwei Clients gleichzeitig Daten senden, wird doch erst der eine bearbeitet und dann der andere, oder sehe ich das falsch? |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
Zitat:
|
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
Könnte auch ein nicht threadsicherer oder nichtsynchronisierter Aufruf sein. Irgendeine Routine macht etwas und wenn sie zurückkommt ist der Thread schon beendet.
Da ist mir dieser Fehler schon untergekommen. Grüße, Messie |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
solange die Anwendung läuft sollte eigentlich auch mein Thread laufen.....
Habe die Exception abgefangen und bekommen "'' ist keine gültiger Integerwert" Muss also in meiner Jobverarbeitung bzw. mein Protokoll überarbeiten.... |
Re: Thread. Thread zugriff verweigert 5. Was passiert da??
Zitat:
Delphi-Quellcode:
Die Variablen, ESI,ESP,ECX,EDX und EAX sind nicht lokal deklariert, also sind es globale Variablen. :mrgreen:
function IntToStr(Value: Integer): string;
asm PUSH ESI MOV ESI, ESP SUB ESP, 16 XOR ECX, ECX // base: 0 for signed decimal PUSH EDX // result ptr XOR EDX, EDX // zero filled field width: 0 for no leading zeros CALL CvtInt MOV EDX, ESI POP EAX // result ptr CALL System.@LStrFromPCharLen ADD ESP, 16 POP ESI end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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