AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetProcessAffinityMask innerhalb einer DLL verwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

SetProcessAffinityMask innerhalb einer DLL verwenden?

Ein Thema von DevidEspenschied · begonnen am 28. Feb 2017 · letzter Beitrag vom 2. Mär 2017
Antwort Antwort
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#1

SetProcessAffinityMask innerhalb einer DLL verwenden?

  Alt 28. Feb 2017, 18:13
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:

mov [eax + edx - 8], edx

Darunter kann ich mir nicht wirklich was vorstellen.

Nun habe ich nochmals die offizielle Dokumentation für SetProcessAffinityMask hier https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx durchgelesen und da steht ein Satz drin, der mich stutzig macht:

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.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SetProcessAffinityMask innerhalb einer DLL verwenden?

  Alt 28. Feb 2017, 23:11
Do not call SetProcessAffinityMask in a DLL that may be called by processes other than your own.
Wenn die DLL nur von deinem Programm (Prozess) aufgerufen wird, dann ignoriere das.

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:
SetThreadAffinityMask
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: SetProcessAffinityMask innerhalb einer DLL verwenden?

  Alt 1. Mär 2017, 14:13
Das sieht für mich eher so aus, als würdest du ein Objekt/Speicher mehrfach freigeben. Eventuell eine Race-Condition?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: SetProcessAffinityMask innerhalb einer DLL verwenden?

  Alt 1. Mär 2017, 14:19
Bist du dir sicher, dass es an SetProcessAffinityMask liegt?
Hast du mal geschaut ob der Fehler auch auftaucht wenn du SetProcessAffinityMask nicht aufrufst?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#5

AW: SetProcessAffinityMask innerhalb einer DLL verwenden?

  Alt 2. Mär 2017, 14:13
Bist du dir sicher, dass es an SetProcessAffinityMask liegt?
Hast du mal geschaut ob der Fehler auch auftaucht wenn du SetProcessAffinityMask nicht aufrufst?
Habe ich nachgeprüft, es liegt nicht an SetProcessAffinityMask. Es liegt an der Erweiterung eines OpenArray-Parameters in einer DLL-Funktion (das hatte ich hier http://www.delphipraxis.net/191814-d...ml#post1362766) schon mal geschrieben.

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.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: SetProcessAffinityMask innerhalb einer DLL verwenden?

  Alt 2. Mär 2017, 14:59
Wie schon gesagt, das klingt ziemlich stark nach einer Race-Condition.

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.
Hat das irgendeinen speziellen Grund, dass du nicht einfach direkt Threads verwendest?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:28 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