Я совершенно новичок в переполнении стека, на самом деле это мой первый пост, так что привет всем. Поэтому давайте перейдем к делу. Использование потока библиотеки boost ver. 1.54.0 Использование VS2010 32 Bit - Professional Я построил библиотеки для потока 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
Не могли бы вы помочь мне заставить этот пример работать. Причина, почему я использую этот пример, заключается в том, что у меня есть другое приложение, которое было настроено точно так же, и оно не работает из-за этой ошибки :-( моя цель - заставить многопоточность работать, а затем я могу взять ее оттуда. Спасибо за ваше время.
Вам нужно реализовать operator()
в callable
.
Не забудьте либо join()
либо detach()
поток, чтобы предотвратить ненормальное завершение программы.
Дополнительную информацию см. В руководстве boost::thread
.
#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();
}