c++multithreadingvisual-studio-2010boost

Boost thread c2064 error when trying to compile


I am using Boost library thread version 1.54.0 and VS2010 32 Bit - Professional.

I have built the libraries for the Boost thread, not using precompiled headers in vs C++ settings, linked the library to the project. Here is the code:

#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;
}

After all this I get this error:

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

How can I get this example to work? The reason why I am using this example is because I have another app which has been set up exactly the same way and it's not working because of this error. My goal is to get the multi-threading to work and then I can take it from there.


Solution

  • You need to implement operator() in callable.

    Don't forget to either join() or detach() thread to prevent abnormal program termination.

    See boost::thread tutorial for more examples.

    #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;