In regelmäßigen Abstand Funktion aufrufen
-
Auch wenn ich das in dieser Reienfolge mache:
InitializeCriticalSection(&CriticalSection); HANDLE hThread = CreateThread(NULL, 0, Thread, (LPVOID)1, 0, 0); HANDLE hThread2 = CreateThread(NULL, 0, Funktion, (LPVOID)2, 0, 0);besteht der beschriebene Fehler weiterhin ...
-
Hast du die anderen beiden Punkte, die ich genannt habe, auch umgesetzt?
-
Die andere Funktion hat keinen kritischen Bereich ... darum halte ich es nicht für sinnvoll, dort auch mit einem kritischen Bereich zu arbeiten ... habe statt der while(1) ne schleife genommen.
grüße
-
Thomas_ schrieb:
Die andere Funktion hat keinen kritischen Bereich ... darum halte ich es nicht für sinnvoll, dort auch mit einem kritischen Bereich zu arbeiten
Genau das ist aber der Sinn einer "CriticalSection": Zu einem Zeitpunkt kann sie nur ein einziger Thread in Beschlag nehmen. Du musst also EnterCriticalSection sowohl im ersten als auch im zweiten Thread aufrufen; dadurch verhinderst du, dass die sich in die Quere kommen. Denn wenn der erste Thread durch EnterCriticalSection den Zugriff erhalten hat, wird der andere Thread in EnterCriticalSection solange blockiert, bis der erste mit LeaveCriticalSection den Zugriff wieder freigibt.
-
zu beachten wäre da noch: eine critical section sollte möglichst schnell wieder verlassen werden. wenn ein thread mit 'Sleep' in einer CS wartet, müssen alle anderen auch so lange warten, die in der CS festhängen...

-
Ich möchte mich bei allen bedanken!
Du musst also EnterCriticalSection sowohl im ersten als auch im zweiten Thread aufrufen;
--> macht Sinn ... ich muss ja für einen einzigartigen Schreibzugriff, aber auch Lesezugriff achten ... das ist logisch ... und funzt sogar

--> auch das ist richtig ... Sleep sollte stellvertretend dür eine langandauernde Löschfunktion stehen. Es macht keinen Sinn Sleep dort hinzuschreiben ... aber für diesen Beispielzweck erfüllt es seine Funktion
Grüße & DANKE!!!
-
unter windows gibts doch sowas wie SetTimer() oder!?
-
gibt es ... wird dabei nicht das System lahm gelegt?? gut zu wiisen ... bin ich heute nicht um sonst aufgestanden

-
warum sollte das das system lahm legen!?
-
Thomas_ schrieb:
gibt es ... wird dabei nicht das System lahm gelegt?? gut zu wiisen ... bin ich heute nicht um sonst aufgestanden

meine das mehr so: Das System wird dabei also nicht lahm gelegt. Doppelverneinungen sind doof!
