AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thread - EnterCriticalSection - Zugriffsverletung - Warum?

Thread - EnterCriticalSection - Zugriffsverletung - Warum?

Ein Thema von Pilloker · begonnen am 15. Jul 2009 · letzter Beitrag vom 15. Jul 2009
Antwort Antwort
Pilloker
(Gast)

n/a Beiträge
 
#1

Thread - EnterCriticalSection - Zugriffsverletung - Warum?

  Alt 15. Jul 2009, 09:30
Hallo,

ich habe mehrere Threads, die auf die geiche Ressource (Füllen eines Arrays) zugreifen sollen.
Darum habe ich, so wie es in Luckies Tutorial beschrieben ist, diesen Bereich in eine Kritische Sektion geklammert.

Delphi-Quellcode:
var
   KritSek: RTL_CRITICAL_SECTION;
begin
[...]
   EnterCriticalSection(KritSek);

   [...]
   //Fülle das Array
   [...]

   LeaveCriticalSection(KritSek);
[...]
end;
Sofort beim Aufruf von EnterCriticalSection erhalte ich eine Zugriffsverletzung. Weiter debuggen ist an der Stelle leider nicht möglich, da die Methode ja in einer DLL steckt.

Daher meine Frage: Hatte jemand von Euch soetwas schonmal, und wie kann das zustande kommen?

Danke im Voraus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.358 Beiträge
 
Delphi 12 Athens
 
#2

Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru

  Alt 15. Jul 2009, 09:33
Vielleicht solltes du dir das Beispiel nochmal ansehen und nach InitializeCriticalSection ausschau halten, sowie nach DeleteCriticalSection?


Zitat von Pilloker:
Weiter debuggen ist an der Stelle leider nicht möglich, da die Methode ja in einer DLL steckt.
wieso nicht?
du kannst ja von Seiten der DLL und auch von Seiten der EXE aus debuggen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Pilloker
(Gast)

n/a Beiträge
 
#3

Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru

  Alt 15. Jul 2009, 09:40
Zitat von himitsu:
Vielleicht solltes du dir das Beispiel nochmal ansehen und nach InitializeCriticalSection ausschau halten, sowie nach DeleteCriticalSection?
Ach herrchechen
Das kommt davon, wenn man nur soviel liest, wie man meint, zu benötigen...

Danke Dir; jetzt funktioniert es natürlich

Zitat von himitsu:
Zitat von Pilloker:
Weiter debuggen ist an der Stelle leider nicht möglich, da die Methode ja in einer DLL steckt.
wieso nicht?
du kannst ja von Seiten der DLL und auch von Seiten der EXE aus debuggen.
So meinte ich das nicht. Ich meinte, dass der Rumpf von 'EnterCriticalSection' in der kernel32.dll steckt, und ich da nicht weiter debuggen kann.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
654 Beiträge
 
Delphi 12 Athens
 
#4

Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru

  Alt 15. Jul 2009, 09:43
@Piloker: Du musst die CriticalSection ja auch irgendwo initialisieren und später wieder freigeben. Machst du das schon irgendwo?

Ansonsten: Ich hatte mir damals auch Luckies Tutorial durchgelesen, um einen Einstieg in die Threads zu finden (Danke dafür!), aber als Abweichung dazu nutze ich nicht RTL_CRITICAL_SECTION, sondern bin auf die von Delphi angebotenen TCriticalSection umgestiegen. Ist im Umgang vielleicht etwas vertrauter.

Im Quellcode muss die dann an der passenden Stelle initialisiert werden:
myCriticalSection:=TCriticalSection.Create; Die Benutzung sieht dann so aus:
Delphi-Quellcode:
myCriticalSection.Acquire;
// ...
// mach was kritisches
// ...
myCriticalSection.Release;
Und wenn man sie nicht mehr braucht, kann man sie wieder entsorgen:
myCriticalSection.Free; Wie gesagt, fand ich von der Handhabung her etwas vertrauter. Und hilft vielleicht, sauber angewandt, auch das Problem zu lösen.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Pilloker
(Gast)

n/a Beiträge
 
#5

Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru

  Alt 15. Jul 2009, 10:33
Hallo Bommel,

auch für Deinen Beitrag vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru

  Alt 15. Jul 2009, 11:27
Hallo

Ich habe es mir angewöhnt IMMER alle lokalen variablen zu initialisieren, egal ob notwendig oder nicht...

Delphi-Quellcode:
begin
  FillChar(KritSek,SizeOf(KritSek),0);
  ...
Peter Schaible
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:36 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