new*_*ent 1 c++ multithreading c++-chrono c++17
你好,我正在用线程做一些简单的练习,我希望我的 t1 休眠 2 秒,但我收到此错误:无法找到数字文字运算符 'operator""s'
这怎么可能?
#include <iostream>
#include <chrono>
#include <thread>
void printt1(int i)
{ std::this_thread::sleep_for(2s);
std::cout << i<<std::endl;
}
int main()
{
std::thread t1(printt1,1);
std::thread t2([](std::thread& t1) { t1.join();std::cout << 2<<std::endl; });
std::thread t3([](std::thread& t2) { t2.join();std::cout << 3<<std::endl; });
t3.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:
这些运算符在 namespace 中声明
std::literals::chrono_literals,其中literals和chrono_literals都是内联命名空间。访问这些运营商可以与获得using namespace std::literals,using namespace std::chrono_literals和using namespace std::literals::chrono_literals。
所以只需添加using namespace std::literals::chrono_literals;到您的文件中,您就可以开始使用了。
编辑:
不管上述问题,你就构造螺纹t2和t3不正确。std::thread&您可能打算通过引用在 lambda 中捕获它,而不是接受 a作为参数的 lambda:
std::thread t1(printt1,1);
std::thread t2([&t1]() { t1.join();std::cout << 2<<std::endl; });
std::thread t3([&t2]() { t2.join();std::cout << 3<<std::endl; });
t3.join();
Run Code Online (Sandbox Code Playgroud)