-2

我正在尝试使用线程调用我的一些成员函数。假设我有这个

class myclass
{
public:
    myclass();
    double function1();
    void function2();
};

myclass::myclass()
{}


double myclass::function1()
{
    ...
    return a double;
}


void myclass::function2()
{
    //use a  thread to call function 1
    std::thread t(function1);//doesnt work!-wont compile
    std::thread t2(myclass::function1);//doesnt work either -wont compile
    std::thread t3(&myclass::function1);//doesnt work here either - wont compile
}

如何通过 C++ 中另一个成员函数内的线程调用成员函数?顺便说一句,我正在使用 Visual Studio 2013 Preview。

更新 2:

我照我说的做了,现在有些代码可以编译得很好,而有些则不能!
这是生成错误的新示例代码:

class xGramManipulator
{
public:
    xGramManipulator();

    void ReadMonoGram();
    void ReadBiGram();

    void ReadMonoGram(double &);
    void ReadBiGram(double &);

    void CreateMonoGramAsync();
    void CreateBiGramAsync();
};

xGramManipulator::xGramManipulator()
{
}

void xGramManipulator::CreateMonoGramAsync()
{
    thread t(&xGramManipulator::ReadMonoGram, this);
}

void xGramManipulator::CreateBiGramAsync()
{
    thread t = thread(&xGramManipulator::ReadBiGram, this);
}

上面的代码(这两个 Async 成员函数)产生以下错误:
错误消息:

错误 C2661:“std::thread::thread”:没有重载函数需要 2 个参数

4

2 回答 2

4

std::thread(&myclass::function1, this)

如果您需要消除重载的歧义,则必须显式转换函数指针:

std::thread(static_cast<void (xGramManipulator::*)()>(&xGramManipulator::ReadMonoGram), this)
于 2013-07-26T11:13:48.460 回答
0

尝试按照此处所述使用 boost::bind 来绑定成员函数的隐式“this”参数:

如何将 boost 绑定与成员函数一起使用

这将使它成为一个没有参数的函数,您可以使用它来启动一个线程。

于 2013-07-26T11:14:06.157 回答