【发布时间】:2016-08-06 16:45:13
【问题描述】:
我正在尝试使用 Win32 函数 QueueUserWorkItem() 将私有成员函数(不应作为公共或受保护的)调用为工作项。我知道我以前做过,而且很容易,但现在我找不到那个 sn-p,也不能让 bind() voodoo 工作。因此,就这个问题而言,该类是:
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() 的方式。
我对@987654331@ 的分配应该是什么样的?
【问题讨论】:
-
了解您看到的错误会很有帮助。
-
请求了错误消息......对我来说它没用 - 也许对你来说很有意义:“没有重载函数的实例“std::bind”与所需的类型匹配”
标签: c++ function winapi private queueuserworkitem