我尝试使用Win32函数QueueUserWorkItem()
作为工作项来调用私有成员函数(不应该作为公共或受保护的方式提供)。我知道我以前做过这件事,而且很容易,但是现在我找不到那个片段,也不能让bind()
伏都教工作。因此,对于这个问题的目的,类是:使用私有成员函数调用Win32 QueueUserWorkItem()
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
分配什么样的内容?
这将有助于了解你所看到的错误。 –
错误消息被请求...对我来说这是没用的 - 也许它对你有意义: “没有重载函数的实例”std :: bind“匹配所需的类型” – BenWestbrook