Рассмотрим код
std::thread t(print_char);
t.join();
Первая строка создает и запускает поток.Во второй строке сразу дождитесь окончания потока.Это делает вашу программу последовательной , а не параллельной.Фактически, это ничем не отличается от вызова функции напрямую вместо создания потока.
Если вы хотите, чтобы поток работал параллельно и независимо от вашего основного потока, у вас должен быть цикл в самой функции потокавместо.Возможно, что-то вроде
std::atomic<bool> keep_running = true;
void print_char() {
while (keep_running) {
std::cout << "*";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
Затем в функции main
вы просто создаете поток и делаете что-то еще, пока не захотите завершить поток.
std::thread t(print_char);
// Do something else...
keep_running = false;
t.join();
InЧто касается вашего текущего кода, он действительно ничем не отличается от
for (int i = 0; i < 100; i++) {
auto a = Timer::now();
for (int j = 0; j < i; j++) {
print_char();
}
auto b = Timer::now();
interval = b-a;
std::cout << std::chrono::duration_cast<s>(interval).count();
std::cout << std::endl;
}