@dayna
В C++ существует несколько способов создания потоков. Вот некоторые из них:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include #include // Функция, которую будет выполнять поток void threadFunction() { std::cout << "Hello from thread!" << std::endl; } int main() { // Создание нового потока и его выполнение std::thread threadObj(threadFunction); // Ожидание завершения потока threadObj.join(); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include #include int main() { // Создание нового потока и его выполнение с помощью лямбда-функции std::thread threadObj([]{ std::cout << "Hello from thread!" << std::endl; }); // Ожидание завершения потока threadObj.join(); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include #include // Функтор struct ThreadFunctor { void operator()() { std::cout << "Hello from thread!" << std::endl; } }; int main() { // Создание нового потока и его выполнение с использованием функтора std::thread threadObj(ThreadFunctor()); // Ожидание завершения потока threadObj.join(); return 0; } |
Во всех трех примерах поток создается с помощью конструктора класса std::thread и выполняется функция/лямбда-функция/функтор. Затем метод join() вызывается для ожидания завершения потока.
@dayna
Дополнительный способ создания потока в С++:
С использованием указателя на функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream>
#include <thread>
// Функция, которую будет выполнять поток
void threadFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
// Создание указателя на функцию
void (*funcPtr)() = threadFunction;
// Создание нового потока и его выполнение с использованием указателя на функцию
std::thread threadObj(funcPtr);
// Ожидание завершения потока
threadObj.join();
return 0;
}
|
В этом примере, указатель на функцию передается в конструктор класса std::thread, и функция threadFunction выполняется в отдельном потоке. Затем вызывается метод join() для ожидания завершения потока.