Thread Problem(Invalid memory access)
Thread Problem(Invalid memory access)
Hallo
ich hab ein kleines Problem.
Mein Programm läuft mit insgesamt 3 Threads. Alle diese Threads benutzen eine Funktion die einen Text in eine Log-Datei schreibt.
Mein Problem ist dass es manchmal einen "Invalid memory access" in dieser Funktion gibt.
Ich vermute das liegt daran wenn 2 oder mehr Threads gleichzeitig diese Funktion ausführen.
Gibt es eine Möglichkeit irgendwas dagegen zu tun?
Danke,
Cornii
ich hab ein kleines Problem.
Mein Programm läuft mit insgesamt 3 Threads. Alle diese Threads benutzen eine Funktion die einen Text in eine Log-Datei schreibt.
Mein Problem ist dass es manchmal einen "Invalid memory access" in dieser Funktion gibt.
Ich vermute das liegt daran wenn 2 oder mehr Threads gleichzeitig diese Funktion ausführen.
Gibt es eine Möglichkeit irgendwas dagegen zu tun?
Danke,
Cornii
Ohne Code ist da nicht viel zu machen, vor allem bei Threads, poste ihn bitte mal.
Gruß, Alex
Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Code: Alles auswählen
Procedure WriteLog(TxT.s)
Time = FormatDate("%hh:%ii:%ss", Date())
PrintN("["+Time+"] " + TxT)
WriteStringN(1,"["+Time+"] " + TxT)
EndProcedure
Und was wird im Main - Thread gemacht? Ein lauffähiger Code incl. Calls wäre praktisch. Ansonsten siehts so aus als würde sich das per Mutex lösen lassen.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Naja, Time ist bei dir nicht deklariert.Cornii hat geschrieben:Das wird von den anderen Threads ganz normal aufgerufenCode: Alles auswählen
Procedure WriteLog(TxT.s) Time = FormatDate("%hh:%ii:%ss", Date()) PrintN("["+Time+"] " + TxT) WriteStringN(1,"["+Time+"] " + TxT) EndProcedure
Code: Alles auswählen
Global LogMutex
LogMutex = CreateMutex()
Procedure WriteLog(TxT.s)
Protected Time.s
Time = FormatDate("%hh:%ii:%ss", Date())
LockMutex(LogMutex)
PrintN("["+Time+"] " + TxT)
WriteStringN(1,"["+Time+"] " + TxT)
UnlockMutex(LogMutex)
EndProcedure
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Jup, auch das ist möglich:DarkDragon hat geschrieben: Das wäre eine Möglichkeit, ich würde jedoch zu einem Queue Container raten, der in einem ganz anderen Thread abgearbeitet wird.
http://www.purebasic.fr/german/viewtopic.php?t=19188
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Hey das hab ich ja noch garnicht gesehen. Ich verwende das genau unter dem gleichen Namen unter C++ (und Java) aber mit eigenem Code und ohne PrioritätsklassencxAlex hat geschrieben:Jup, auch das ist möglich:DarkDragon hat geschrieben: Das wäre eine Möglichkeit, ich würde jedoch zu einem Queue Container raten, der in einem ganz anderen Thread abgearbeitet wird.
http://www.purebasic.fr/german/viewtopic.php?t=19188

Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken