#c #multithreading #c 17 #chrono
Вопрос:
Я проверил много сообщений StackOverflow, но никакие ответы не решают мою проблему.
Я получаю 2 ошибки:
g .main.cpp -fopenmp -o test
.main.cpp:12:14: error: 'std::this_thread' has not been declared
12 | std::this_thread::sleep_for(chrono::seconds(20000) );
.main.cpp:12:37: error: 'chrono' has not been declared
12 | std::this_thread::sleep_for(chrono::seconds(20000) );
Моя текущая версия G такова:
g .exe (MinGW.org Сборка GCC-2) 9.2.0
Код таков:
#include <iostream>
#include <chrono>
#include <thread>
#include <omp.h>
int main()
{
omp_set_num_threads(4);
#pragma omp parallel
{
std::this_thread::sleep_for(chrono::seconds(20000) );
std::cout << "Number of available threads: " << omp_get_num_threads() << std::endl;
std::cout << "Current thread number: " << omp_get_thread_num() << std::endl;
std::cout << "Hello, World!" << std::endl;
}
return 0;
}
Я уже пробовал -std=c 11
с 11 , 14 и 17.
Комментарии:
1.
std::this_thread
является частью<thread>
, поэтому это не должно приводить к сбою, если только реализация компилятора не<thread>
является неполной. Ноchrono::...
так и должно бытьstd::chrono::...
, поскольку у вас нетusing namespace std;
заявления.2. IIRC, вам нужен WinGW 64 для поддержки потоков.
Ответ №1:
Я не уверен, что это правильно, но по поводу вашей второй ошибки вы можете заменить ее на
std::this_thread::sleep_for(chrono::seconds(20000) );
Для
std::this_thread::sleep_for(std::chrono::seconds(20000));
Я думаю, что первая ошибка зависит от второй, но я не уверен.
Комментарии:
1. Я исправил хронографическую ошибку с вашим ответом, но первый все еще здесь
2. Я думаю, что вы что-то забываете, потому что единственная проблема, которую это мне создает, — это все звонки с opm (без него). This_thread не доставляет мне никаких проблем.