我正在尝试了解如何使用 Visual Studio 2012 使用新的 std::thread。我正在尝试编译以下代码。
#include <iostream>
#include <thread>
class scoped_thread
{
std::thread t_;
public:
explicit scoped_thread(std::thread & t): t_(std::move(t))
{
if(!t_.joinable())throw std::logic_error("No thread");
}
~scoped_thread()
{
t_.join();
}
private:
scoped_thread(scoped_thread const &);
scoped_thread & operator=(scoped_thread const &);
};
struct local_functor
{
int& i_;
local_functor(int & i):i_(i){}
void operator()()
{
while(i_ < 1e5)i_++;
}
};
// can potentially throw exceptions
void callAnotherFunc()
{
std::cout << "this function can throw an exception" << std::endl;
// try (un)commenting the line below and see the behaviour
throw std::out_of_range("WTF2");
}
int main()
{
int some_local_state = 0;
try
{
scoped_thread t(std::thread(local_functor(some_local_state)));
callAnotherFunc();
std::cout << "Proper exit of function" << std::endl;
}
catch(const std::exception & e)
{
std::cout << e.what() << " exception occurred!" << std::endl;
}
catch(...)
{
std::cout << "Unhandled exception!" << std::endl;
}
return 0;
}
我收到一条警告,上面写着警告 C4930: 'scoped_thread t(std::thread (__cdecl *)(local_functor))': 未调用原型函数(是否打算定义变量?)
是的,这是一个预期的变量定义。我该怎么做?