С помощью async
запускаю в main
поток, в котором крутится бесконечный цикл. Как завершить этот поток?
*.pro файл для QtCreator:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
LIBS += -lpthread
SOURCES += main.cpp
main.cpp:
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
#include <cstdlib>
#include <future>
using namespace std;
bool ExitFlag = false;
int someVariable = 0;
std::mutex threadMutex;
void threadFunc(){
while (true){
std::this_thread::sleep_for(std::chrono::seconds(1));
someVariable = std::rand() % 100;
std::cout << "var:" << someVariable << std::endl;
bool needExit = false;
threadMutex.lock();
needExit = ExitFlag;
threadMutex.unlock();
if (needExit){
break;
}
}
}
int main()
{
auto f = std::async(std::launch::async, threadFunc);
std::this_thread::sleep_for(std::chrono::seconds(10));
threadMutex.lock();
ExitFlag = true;
threadMutex.unlock();
f.get();
cout << "Hello World!" << endl;
return 0;
}
Вывод:
var:83
var:86
var:77
var:15
var:93
var:35
var:86
var:92
var:49
var:21
Hello World!
Завершить отпущенный поток извне нельзя, если в вашем потоке нет условия выхода, то это ошибка.
Для винды есть функция TerminateThread https://msdn.microsoft.com/en-us/library/windows/desktop/ms686717(v=vs.85).aspx, но её использование опасно и чревато
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Проблема в том чтобы после выполнения исключения Owerwriting программа продолжила работу и копировала файл,у меня она просто выдает исключение...
Когда я пытаюсь создать/открыть проект Visual C++, я получаю такое сообщение:
Помогите понять в чем ошибкаУдаляет все правильно, но при выводе списка в консоли вылетает ошибка