Ich habe eine Win32 Anwendung mit einer sehr grossen, rechenintensiven Funktion, die braucht bis zu 10 Sek. für einen Durchlauf.
Damit mir dabei nicht jedesmal das Fenster einfriert, habe ich diese Funktion in einen thread gepackt.
Ein paar Flags dazu gesetzt, und schon läuft das Ganze.
Trotzdem bin ich nicht ganz glücklich, weil je nach CPU Auslastung WM_PAINT Messages ins stottern kommen, sprich man sieht, dass da was langsamer geht als es sollte.
Die Idee ist nun, wenn der User eine Dual- oder QuadCore CPU hat, könnte man den Riesen-thread auf den zweiten Kern legen, so dass der Rest der Anwendung nicht stottert.
Allerdings ist das für mich völliges Neuland, ich habe ganz schlicht überhaupt keinen Plan wie ich
1) rausfinden kann welche CPU im Rechner steckt
2) rausfinden kann auf welchem Kern meine Anwendung läuft
3) CreateThread() auf einen bestimmten Kern legen kann
Google und MSDN sind auch nicht besonders ergiebig zum Thema, das Einzige was ich gefunden habe, sind ein paar Projekte mit dem Ziel dies zu erreichen, aber ohne Lösung.
Nachdem man im Windows Taskmanager jeden thread manuell auf einen bestimmten Kern legen kann, gehe ich mal davon aus, dass man das Ganze auch problemlos innerhalb der Anwendung machen kann, nur wie?
Wenn möglich in API plain.
Damit mir dabei nicht jedesmal das Fenster einfriert, habe ich diese Funktion in einen thread gepackt.
Ein paar Flags dazu gesetzt, und schon läuft das Ganze.
Trotzdem bin ich nicht ganz glücklich, weil je nach CPU Auslastung WM_PAINT Messages ins stottern kommen, sprich man sieht, dass da was langsamer geht als es sollte.
Die Idee ist nun, wenn der User eine Dual- oder QuadCore CPU hat, könnte man den Riesen-thread auf den zweiten Kern legen, so dass der Rest der Anwendung nicht stottert.
Allerdings ist das für mich völliges Neuland, ich habe ganz schlicht überhaupt keinen Plan wie ich
1) rausfinden kann welche CPU im Rechner steckt
2) rausfinden kann auf welchem Kern meine Anwendung läuft
3) CreateThread() auf einen bestimmten Kern legen kann
Google und MSDN sind auch nicht besonders ergiebig zum Thema, das Einzige was ich gefunden habe, sind ein paar Projekte mit dem Ziel dies zu erreichen, aber ohne Lösung.
Nachdem man im Windows Taskmanager jeden thread manuell auf einen bestimmten Kern legen kann, gehe ich mal davon aus, dass man das Ganze auch problemlos innerhalb der Anwendung machen kann, nur wie?
Wenn möglich in API plain.