AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Thread. Thread zugriff verweigert 5. Was passiert da??
Thema durchsuchen
Ansicht
Themen-Optionen

Thread. Thread zugriff verweigert 5. Was passiert da??

Ein Thema von Thomas83 · begonnen am 26. Sep 2008 · letzter Beitrag vom 28. Sep 2008
Antwort Antwort
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#1

Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 09:49
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 10:20
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?)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#3

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 11:05
super danke, werde ich mal testen.

thx
  Mit Zitat antworten Zitat
Xeres

Registriert seit: 11. Aug 2008
18 Beiträge
 
#4

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 11:11
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.
Blog von Entwicklern für Entwickler:

http://www.entwicklerforum.org
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#5

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 15:01
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?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 15:39
Zitat von Xeres:
Selbst IntToStr oder DateTimeToStr schreibt Intern die Werte in eine globale Variable.
Sicher?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 26. Sep 2008, 16:49
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
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#8

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 28. Sep 2008, 11:39
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....
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Thread. Thread zugriff verweigert 5. Was passiert da??

  Alt 28. Sep 2008, 12:03
Zitat von sirius:
Zitat von Xeres:
Selbst IntToStr oder DateTimeToStr schreibt Intern die Werte in eine globale Variable.
Sicher?
JA! Hier:
Delphi-Quellcode:
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;
Die Variablen, ESI,ESP,ECX,EDX und EAX sind nicht lokal deklariert, also sind es globale Variablen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 10:52 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