![]() |
SetProcessAffinityMask innerhalb einer DLL verwenden?
Hallo,
der Einsatz von SetProcessAffinityMask ist mir vollständig bekannt und ich verwende das bereits in meiner Applikation. Nun geht es bei der Auslagerung eines bestimmten Codeabschnitts in einer DLL darum, dass dort ebenfalls SetProcessAffinityMask mit ausgelagert werden und von der DLL verwendet werden soll. Der DLL-Code an sich funktioniert auch problemlos, allerdings erscheint beim Beenden der DLL-Applikation eine Access Violation, wenn ich dort auf "Anhalten" drücke, springt der Debugger in die Datei c:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl\sys\getme m.inc in Zeile 2080:
Delphi-Quellcode:
mov [eax + edx - 8], edx
Darunter kann ich mir nicht wirklich was vorstellen. Nun habe ich nochmals die offizielle Dokumentation für SetProcessAffinityMask hier ![]() Do not call SetProcessAffinityMask in a DLL that may be called by processes other than your own. Hat von Euch schonmal jemand SetProcessAffinityMask in einer DLL verwendet bzw. kann mir einen Tipp geben, wie ich die Meldung wegbekomme oder wo ich weiter ansetzen kann? Vielen Dank. |
AW: SetProcessAffinityMask innerhalb einer DLL verwenden?
Zitat:
Aber mich würde es auch ankotzen, wenn irgendeine DLL global an meinem Prozess rumfummelt, also nicht nur an Dingen, die nur zu dieser DLL gehören. PS: Zitat:
|
AW: SetProcessAffinityMask innerhalb einer DLL verwenden?
Das sieht für mich eher so aus, als würdest du ein Objekt/Speicher mehrfach freigeben. Eventuell eine Race-Condition?
|
AW: SetProcessAffinityMask innerhalb einer DLL verwenden?
Bist du dir sicher, dass es an SetProcessAffinityMask liegt?
Hast du mal geschaut ob der Fehler auch auftaucht wenn du SetProcessAffinityMask nicht aufrufst? |
AW: SetProcessAffinityMask innerhalb einer DLL verwenden?
Zitat:
![]() Seltsamerweise funktioniert die Erweiterung des OpenArrays sonst wunderbar, nur in einem Codeabschnitt nicht (oder zumindest resultiert die OpenArray-Erweiterung in einer Access Violation, wenn ich das Programm beende). Vom Prinzip ermittle ich die Anzahl logischer CPU-Kerne, setze nacheinander jeden einzelnen Kern als aktiv, führe einen bestimmten Lesebefehl durch, und springe zum nächsten Kern weiter. Meine CPU hat 8 logische Kerne, und wenn ich die Schleife auf 5 begrenze, funktioniert alles noch. Erst ab dem 6. Kern kommt diese Access Violation, die ich weiter oben beschrieben habe. |
AW: SetProcessAffinityMask innerhalb einer DLL verwenden?
Wie schon gesagt, das klingt ziemlich stark nach einer Race-Condition.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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