传递类方法给CreateThreadPoolWork



我正在尝试呼叫CreateThreadPoolWork(),第一个参数是一个函数。我正在调用类内部的函数,并且我希望线程执行类内部的函数。

class A{
public:
void print() {
std::cout << "Hello";
}
void ctpw() {
...
PTP_WORK pw = CreateThreadPoolWork((PTP_WORK_CALLBACK)print, nullptr, &tpenv);
...
};

上面的不起作用。如果我将print设置为static,它将工作,但是需要引用类属性的方法中的任何变量都无法访问。

我能想到的唯一选择是创建一个结构体并传递一个指向类实例的指针和一个指向我需要传递给线程函数的数据的指针。我希望不这样做也可以。

CreateThreadPoolWork()采用c风格的函数指针。你不能给它传递一个非静态类方法,只能传递一个独立的函数或静态类方法。

然而,它接受一个用户定义的值作为void*指针,你可以用它来传递你的对象的this指针。

试试这个:

class A{
public:
void print() {
std::cout << "Hello";
}
VOID CALLBACK do_print(PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_WORK Work) {
static_cast<A*>(Context)->print();
}
void ctpw() {
...
PTP_WORK pw = CreateThreadPoolWork(&A::do_print, this, &tpenv);
...
};

相关内容

  • 没有找到相关文章

最新更新