Win32 関数を使用してワーカー アイテムとしてプライベート メンバー関数 (パブリックまたはプロテクトとして使用可能であってはなりません) を呼び出そうとしていますQueueUserWorkItem()
。以前にこれを行ったことがあり、簡単だったことは知っていますが、今ではそのスニペットを見つけることができず、bind()
ブードゥーを機能させることもできません. したがって、この質問の目的のために、クラスは次のとおりです。
class Arbitrary {
public:
Arbitrary() ;
~Arbitrary() ;
bool UsefulPublicFunction(unsigned uParameter) ;
protected:
private:
void PrivateWorkItem(void* pVoid) ;
} ;
内部UsefulPublicFunction()
には次のように表示されます。
LPTHREAD_START_ROUTINE pThreadStartRoutine ;
ULONG uFlags = 0 ;
void* pContext = nullptr ;
if (QueueUserWorkItem(pThreadStartRoutine, pContext, uFlags)) {
//blah blah blah
}
私が雑草に夢中になっているように見えるのは、次のpThreadStartRoutine
ようなものへの割り当てです。
pThreadStartRoutine = std::bind<&Arbitrary::PrivateWorkItem, this, std::placeholders::_1> ;
PrivateWorkItem
おそらく署名を次のように変更する必要があることを認識しています。
private:
DWORD WINAPI PrivateWorkItem(void* pVoid) ;
その変化があっても、喜びはありません。VS2015 は、私が使用している方法が本当に嫌いですbind()
。
私の課題はpThreadStartRoutine
どのように見えるべきですか?