#include <iostream>
#include <vector>
#include <thread>
#include <chrono>
// Функция для вычисления факториала
unsigned long long factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
// Функция выполнения длительных вычислений
void performCalculations(int id) {
try {
int number = 20; // Число для вычисления факториала
unsigned long long result = factorial(number);
std::cout << "Факториал числа " << number << " равен " << result << " (ID: " << id << ")" << std::endl;
}
catch (const std::exception& e) {
std::cerr << "Исключение: " << e.what() << std::endl;
}
catch (...) {
std::cerr << "Неизвестное исключение" << std::endl;
}
}
int main() {
setlocale(LC_ALL, "Rus");
const int numChildren = 3; // Количество дочерних потоков
std::vector<std::thread> threads;
std::vector<std::chrono::time_point<std::chrono::high_resolution_clock>> startTimes, endTimes;
// Запуск и измерение времени выполнения потоков
for (int i = 0; i < numChildren; ++i) {
startTimes.push_back(std::chrono::high_resolution_clock::now());
threads.emplace_back(performCalculations, i + 1);
}
for (auto& t : threads) {
t.join(); // Ожидание завершения дочернего потока
endTimes.push_back(std::chrono::high_resolution_clock::now());
}
// Вывод времени выполнения потоков
for (int i = 0; i < numChildren; ++i) {
double duration = std::chrono::duration<double>(endTimes[i] - startTimes[i]).count();
std::cout << "Поток " << i + 1 << " выполнился за " << duration << " секунд." << std::endl;
}
std::cout << "Все дочерние потоки завершены." << std::endl;
return 0;
}