Neden krono kitaplığını kullanamıyorum?

Aug 18 2020

Merhaba iş parçacığı ile kolay bir egzersiz yapıyorum, t1'imin 2 saniye uyumasını istiyorum ama şu hatayı alıyorum: sayısal literal operatörü "" s 'bulunamıyor

Bu nasıl mümkün olabilir?

#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;
}

Yanıtlar

8 chakaz Aug 18 2020 at 14:37

Nereden https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:

Bu operatörler, std::literals::chrono_literalsher ikisinin de literalsve chrono_literalssatır içi ad alanları olduğu ad alanında bildirilir. Bu operatörler erişim ile elde edilebilir using namespace std::literals, using namespace std::chrono_literalsve using namespace std::literals::chrono_literals.

Bu yüzden using namespace std::literals::chrono_literals;dosyanıza ekleyin ve gitmeniz iyi olur.


Düzenle:

Ne olursa olsun yukarıdaki konuya, sen konuları inşa ediyoruz t2ve t3yanlış. A'yı std::thread&argüman olarak kabul eden bir lambda yerine, muhtemelen bunu lambda'da şu şekilde referans alarak yakalamak istediniz:

    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();