![]() |
Thread - EnterCriticalSection - Zugriffsverletung - Warum?
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:
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.
var
KritSek: RTL_CRITICAL_SECTION; begin [...] EnterCriticalSection(KritSek); [...] //Fülle das Array [...] LeaveCriticalSection(KritSek); [...] end; Daher meine Frage: Hatte jemand von Euch soetwas schonmal, und wie kann das zustande kommen? Danke im Voraus. |
Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru
Vielleicht solltes du dir das Beispiel nochmal ansehen und nach InitializeCriticalSection ausschau halten, sowie nach DeleteCriticalSection? :angel2:
Zitat:
du kannst ja von Seiten der DLL und auch von Seiten der EXE aus debuggen. |
Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru
Zitat:
Das kommt davon, wenn man nur soviel liest, wie man meint, zu benötigen... Danke Dir; jetzt funktioniert es natürlich :) Zitat:
|
Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru
@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:
Delphi-Quellcode:
Die Benutzung sieht dann so aus:
myCriticalSection:=TCriticalSection.Create;
Delphi-Quellcode:
Und wenn man sie nicht mehr braucht, kann man sie wieder entsorgen:
myCriticalSection.Acquire;
// ... // mach was kritisches // ... myCriticalSection.Release;
Delphi-Quellcode:
Wie gesagt, fand ich von der Handhabung her etwas vertrauter. Und hilft vielleicht, sauber angewandt, auch das Problem zu lösen. :)
myCriticalSection.Free;
Bis denn Bommel |
Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru
Hallo Bommel,
auch für Deinen Beitrag vielen Dank :) |
Re: Thread - EnterCriticalSection - Zugriffsverletung - Waru
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); ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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