AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TCriticalSection.Enter - seltsames Verhalten
Thema durchsuchen
Ansicht
Themen-Optionen

TCriticalSection.Enter - seltsames Verhalten

Ein Thema von grl · begonnen am 23. Jul 2017 · letzter Beitrag vom 23. Jul 2017
 
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#1

TCriticalSection.Enter - seltsames Verhalten

  Alt 23. Jul 2017, 13:06
Delphi-Version: 7
Tag!

Bin wieder einmal dabei an einem alten D7 Projekt rumzufummeln.

Das Projekt ist multithreaded und verwendet CriticalSections zur synchronisation.

Für verschiedene Zwecke gibts da eine abgeleitete CriticalSection-Klasse die unter gewissen Umständen nicht blocken (und damit einen Deadlock erzeugen) soll sondern das Programm in einen kontrollierten Fehlerzustand bringen.

Diese Klasse (obwohl sehr einfach gestrickt) macht wohl Probleme. Habe sie daher für die Diagnose extrem vereinfacht und bin auf ein seltsames Verhalten draufgekommen.

Hier ist der Quellcode der Klasse (nicht wundern, daß das so aussieht als wäre es ziemlich sinnlos dafür eine eigene Ableitung zu machen - der ganze Kram, wegen dem es eine eigene Klasse wurde ist wegen der Fehlersuche entfernt)
Delphi-Quellcode:
unit uTestCriticalSection;

interface

uses SyncObjs;

type
  TTestCriticalSection=class(TCriticalSection)
  public
    function TryEnter:Boolean;
  end;

implementation

function TTestCriticalSection.TryEnter:Boolean;
begin
  Enter;
  Result:=True;
end;

end.
Im Programm gibts wird sie dann so eingesetzt:
Delphi-Quellcode:
var TestCS:=TTestCriticalSection;
//[...]
if not TestCS.TryEnter then begin
  Log('Could not enter CS - Error');
  //[ErrorHandling]
end;
Durch die extreme Verkürzung der Funktion TryEnter hätte ich erwartet, daß es entweder einen Deadlock geben muss (durch das Enter) oder die Funtion True zurückgeben muss. Die Zeile Log(...) und das Errorhandling dazu sollte eigentlich nie erreicht werden.
Trotzdem passiert das ab und zu.

Ich habe bereits geprüft, daß die TestCS.Klasse zum Zeitpunkt des Aufrufs auch korrekt initiert wurde. Es ist auch die Selbe TestCS für alle Teile des Programms die sie nutzen...

Warum gibt TryEnter also hier ab und zu False zurück? Steh ich hier nur auf der Leitung? Wirklich reproduzieren kann ich's leider nicht - nicht in der eigentlichen Applikation und schon gar nicht in dem Testprogramm das ich mir gebaut hab. Aber es tritt ab und zu auf - wie ich am Fehlerhandlich sehen kann

Jemand eine Idee?

Danke
Luggi
  Mit Zitat antworten Zitat
 


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 08:55 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 by Thomas Breitkreuz