Ich versuche, eine private Member-Funktion (sollte nicht als öffentlich oder geschützt verfügbar sein) als ein Worker-Element mit der Win32-Funktion QueueUserWorkItem()
aufrufen. Ich weiß, dass ich das schon einmal gemacht habe und es war einfach, aber jetzt kann ich dieses Schnipsel nicht finden, noch kann ich bind()
Voodoo arbeiten lassen. Also für die Zwecke dieser Frage der Klasse:Win32 QueueUserWorkItem() mit einer privaten Memberfunktion aufrufen
class Arbitrary {
public:
Arbitrary() ;
~Arbitrary() ;
bool UsefulPublicFunction(unsigned uParameter) ;
protected:
private:
void PrivateWorkItem(void* pVoid) ;
} ;
Und innen UsefulPublicFunction()
könnten wir sehen:
LPTHREAD_START_ROUTINE pThreadStartRoutine ;
ULONG uFlags = 0 ;
void* pContext = nullptr ;
if (QueueUserWorkItem(pThreadStartRoutine, pContext, uFlags)) {
//blah blah blah
}
Wo ich scheine in dem Unkraut zu gehen sind mit der Zuordnung zu pThreadStartRoutine
mit so etwas wie :
pThreadStartRoutine = std::bind<&Arbitrary::PrivateWorkItem, this, std::placeholders::_1> ;
ich erkennen, dass die Signatur für PrivateWorkItem
wahrscheinlich ändern sollte:
private:
DWORD WINAPI PrivateWorkItem(void* pVoid) ;
Auch mit dieser Änderung keine Freude. VS2015 hasst wirklich die Art, wie ich bind()
benutze.
Wie soll meine Zuordnung zu pThreadStartRoutine
aussehen?
Es wäre hilfreich zu wissen, welche Fehler Sie sehen. –
Die Fehlermeldung wurde angefordert ... für mich war es nutzlos - vielleicht macht es für Sie Sinn: "keine Instanz der überladenen Funktion" std :: bind "entspricht dem erforderlichen Typ" – BenWestbrook