this_thread / хроно не был объявлен

#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 не доставляет мне никаких проблем.