Как правильно создать потоки в c++?

Пользователь

от dayna , в категории: JavaScript , год назад

Как правильно создать потоки в c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от karen.wisozk , год назад

@dayna 

В C++ существует несколько способов создания потоков. Вот некоторые из них:

  1. С использованием библиотеки
 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. С использованием лямбда-функции:
 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. С использованием функционального объекта (функтора):
 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() вызывается для ожидания завершения потока.

Пользователь

от violette_robel , 4 месяца назад

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