#c #multithreading #visual-c
#c #многопоточность #visual-c
Вопрос:
Я пытаюсь создавать потоки, используя стандартную библиотеку C , с помощью функций.
#include <iostream>
#include <thread>
using namespace std;
void print()
{
printf("PRINTn");
printf("PRINT2n");
}
void createThread()
{
thread newThread(print);
}
int main()
{
createThread();
cin.get();
}
программа компилируется и запускается, но как только поток завершен, она создает «ошибку отладки». Есть мысли?
Комментарии:
1. Вы не должны использовать
printf
в подпрограмме потока2. Что за «ошибка отладки»? Есть ли сообщение? Неправильно ли работает программа?
3. @stackptr — кто говорит?
Ответ №1:
Проблема в том, что ваш объект thread выходит за пределы области видимости до того, как вы вызовете его detach()
join()
элемент or .
Попробуйте это:
int main()
{
thread newThread(print);
...
newThread.join();
return 0;
}
Ответ №2:
Если ваша «ошибка отладки» означает сообщение об ошибке компилятора, вам следует проверить, установлен ли -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 дополнительных пункта:
-
using namespace std
не рекомендуется. -
не забудьте
join()
после создания потока -
return 0
для main() -
printf()
находится в stdio.h. используетсяstd::cout
для iostream