我正在尝试将私有成员函数(不应作为公共或受保护的)调用为具有 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
样的?