/
VictorArtyukhov
/
multithreading
Обзор
Документация
Войти
/
VictorArtyukhov
/
multithreading
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main.cpp
47 строк
1 KB
Victor Artyukhov
added two versions of the logger
11 июн 2026, 18:02
11 июн 2026, 18:02
ca3af96
Код
Авторство
О чём код?
#include "logger.hpp" long mtime() { struct timespec t; clock_gettime(CLOCK_REALTIME, &t); long mt = (long)t.tv_sec * 1000 + t.tv_nsec / 1000000; return mt; } int main() { long t = mtime(); // VA !!! try { #ifdef logger_with_test logger_with_test logger; #else logger logger; #endif //const std::jthread logger_thread{[&](std::stop_token stop) { // VA: запускаем logger, с целью вывода в лог одновременно с записью в очередь logger // logger.run(stop); //}}; std::list<std::jthread> threads; std::atomic_int threads_counter{1}; //std::generate_n(std::back_inserter(threads), 3u, [&] { std::generate_n(std::back_inserter(threads), 5000u, [&] { // VA: тест на большое количество одновременных потоков return std::jthread{[&] { const auto thread_id = threads_counter.fetch_add(1); logger.post(std::format("[{}] one\n", thread_id)); std::this_thread::sleep_for(1s); logger.post(std::format("[{}] two\n", thread_id)); }}; }); const std::jthread logger_thread{[&](std::stop_token stop) { logger.run(stop); }}; threads.clear(); logger.post("[0] done\n"); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << '\n'; return EXIT_FAILURE; } t = mtime()-t; // VA !!! printf("Time period = %ld ms\n", t); return EXIT_SUCCESS; }