gpt4 book ai didi

c++ - 如何让Windows线程池调用类成员函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:45 33 4
gpt4 key购买 nike

我希望 Windows 线程池 (QueueUserWorkItem()) 调用我类的成员函数。

不幸的是,这不能通过将成员函数指针作为参数传递给 QueueUserWorkItem() 来直接完成。

困难在于必须调用多个成员函数并且它们具有不同的签名(尽管都返回 void)。

可能需要添加几层抽象才能使其正常工作,但我不确定如何处理。有什么想法吗?

最佳答案

这可能会有所帮助。您可以使用 tr1::function () 和 tr1::bind 来“合并”各种调用:

   #include <iostream>
#include <tr1/functional>
using namespace std;
using namespace tr1;

class A
{
public:
void function(int i) { cout << "Called A::function with i=" << i << endl; }
};

void different_function(double c) {
cout << "Called different_function with c=" << c << endl;
}


int main(int argc, char* argv[])
{
function<void()> f = bind(different_function, 3.14165);
f();

A a;
f = bind(&A::function, a, 10);
f();

return 0;
}

函数对象的地址可以作为单个可调用对象传递(只需要一个地址)。

关于c++ - 如何让Windows线程池调用类成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666259/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com