Как сделать темы с функциями: C ++ - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь создавать потоки, используя стандартную библиотеку C ++ через функции.

#include <iostream>
#include <thread>
using namespace std;

void print()
{
    printf("PRINT\n");
    printf("PRINT2\n");
}

void createThread() 
{
    thread newThread(print);
}

int main()
{
    createThread();
    cin.get();
}

программа компилируется и запускается, но как только поток завершается, он создает "ошибку отладки". Есть мысли?

Ответы [ 2 ]

4 голосов
/ 22 апреля 2019

Проблема в том, что ваш объект потока выходит из области видимости, прежде чем вы вызовете его detach() или join() член.

Попробуйте это:

int main()
{
    thread newThread(print);
    ...
    newThread.join();
    return 0;
}
0 голосов
/ 22 апреля 2019

Если ваша «ошибка отладки» означает сообщение об ошибке компилятора, вы должны проверить, установлен ли флаг -pthread.То есть скомпилируйте код с

$ g++ -std=c++11 main.cpp -pthread -o main

Если ваша «ошибка отладки» означает ошибку времени выполнения, вы должны запомнить join() после создания потока.

исходный код:

#include <iostream>
#include <thread>

void print()
{
    std::cout << "PRINT"   << std::endl;;
    std::cout << "PRINT 2" << std::endl;;
}

void create_thread()
{
    std::thread print_thread(print);
    print_thread.join();  // remember to join()
}

int main()
{
    create_thread();
    return 0;
}

Кроме того, вы можете обратить внимание на 4 дополнительных пункта:

  1. using namespace std не рекомендуется.

  2. не забудьте join() после создания потока

  3. return 0 для main ()

  4. printf() находится в stdio.h.используйте std::cout для iostream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...