#c #multithreading #c 17 #chrono
#c #многопоточность #c 17 #c -chrono
Вопрос:
Здравствуйте, я выполняю простое упражнение с потоком, я хочу, чтобы мой 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::threadamp; t1) { t1.join();std::cout << 2<<std::endl; });
std::thread t3([](std::threadamp; t2) { t2.join();std::cout << 3<<std::endl; });
t3.join();
return 0;
}
Ответ №1:
Из https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:
Эти операторы объявлены в пространстве имен
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::threadamp;
в качестве аргумента, вы, вероятно, имели в виду записать его в лямбда-выражении по ссылке как таковой:
std::thread t1(printt1,1);
std::thread t2([amp;t1]() { t1.join();std::cout << 2<<std::endl; });
std::thread t3([amp;t2]() { t2.join();std::cout << 3<<std::endl; });
t3.join();