@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()
для ожидания завершения потока.