尝试编译时增加了线程c2064错误

时间:2013-10-10 12:03:14

标签: c++ multithreading visual-studio-2010 boost

我对堆栈溢出很新,事实上这是我的第一篇文章,所以大家好。所以,让我们谈谈这一点。 使用boost库线程版。 1.54.0 使用VS2010 32位 - 专业版 我已经为boost线程构建了库, 在vs C ++设置中不使用预编译头文件, 将库链接到项目, 这是代码

    #include <boost\thread\thread_only.hpp>
#include <iostream>
#include <conio.h>
#pragma comment(lib, "libboost_thread-vc100-mt-gd-1_54.lib")
#define BOOST_LIB_NAME libboost_thread-vc100-mt-gd-1_54.lib


struct callable
{
     void blah();
};

void callable::blah()
{
    std::cout << "Threading test !\n";
}
boost::thread createThread()
{
    callable x;
    return boost::thread(x);
}
int main()
{
    createThread();
    _getch();
    return 0;
}

毕竟我得到了这个错误

Error   1   error C2064: term does not evaluate to a function taking 0 arguments    ..\..\boost_1_54_0\boost\thread\detail\thread.hpp   117 1   BoostTrial

你能帮助我让这个例子起作用吗?我使用这个例子的原因是因为我有另一个应用程序设置完全相同的方式因为这个错误而无法正常工作:-(我的目标是让多线程工作然后我可以从那里拿走它。 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

您需要在operator()中实施callable

不要忘记join()detach()线程,以防止程序异常终止。

有关更多示例,请参阅boost::thread tutorial

#include <boost\thread\thread_only.hpp>
#include <iostream>
#pragma comment(lib, "libboost_thread-vc100-mt-gd-1_54.lib")

using namespace boost;

struct callable
{
    void operator()()
    {
        std::cout << "Threading test !\n";
    }
};


boost::thread createThread()
{
    callable x;
    return boost::thread(x);
}
int main()
{
    boost::thread th = createThread();
    th.join();

}

Example with std::thread;