Форум программистов, компьютерный форум, киберфорум
Наши страницы

Корректно убить поток - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заполнять в одиннадцати процессах массивы случайными числами http://www.cyberforum.ru/cpp/thread1555788.html
Создать программу, состоящую из 11 процессов. Каждый процесс, кроме 0, должен с генерировать массив целых случайных чисел из 1000 элементов, в промежутке от 0 до 1000. Используя операции...
C++ WMPI - функции коллективного обмена в MPI . Производные типы в MPI помогите пожалуйста - вот задание: Разработать программу, создающую MPI - тип данных C- структуры (long a; unsigned char b; float c ) и передает по помощью функций коллективного обмена экземпляр... http://www.cyberforum.ru/cpp/thread1555764.html
C++ Обработка исключений OpenSSL
Здравствуйте, не нашел в документации к OpenSSL как осуществлять обработку ошибок в нем, например при использовании функции COMP_expand_block, в случае подачи не верных данных(например подача не...
C++ Фильтры в ffmpeg: нужно ли отдельными функциями заполнять AVFilterContext?
Здравствуйте. В интернете в статье программирования на базе ffmpeg приводился пример с использованием функция для заполнения AVFormatContext использовалось avformat_open_input , AVCodecContext...
C++ Работа с OpenCV, нахождение параметров обьектов http://www.cyberforum.ru/cpp/thread1552777.html
Здравствуйте, Мне нужно сделать один проект по учебе, речь идет о програмированнии одной программки. Задача следующая: в распоряжении у меня индустриальная камера и лазер, нужно 'сделать', прибор...
C++ Прекращает читать fstream после ~17000 байт Такая проблема... Я написал программу, которая считывает формат ico, сохраняет заголовок (62 байта) в структуру, и затем отрисовывает в консоли пиксели по 4 байта (RGB, Alpha). Но после отрисовки... подробнее

Показать сообщение отдельно
mat_for_c
173 / 168 / 37
Регистрация: 26.04.2013
Сообщений: 772
Завершенные тесты: 3

Корректно убить поток - C++

21.10.2015, 09:42. Просмотров 909. Ответов 27
Метки (Все метки)

Пусть имеется поток thrdWork, который обрабатывает большие данные. В результате этой работы в памяти каждый раз сохраняются наиболее лучшие результаты. Т.к. эти результаты перезаписываются, то вывод их в файл возможен по окончанию обработки данных, что не реально долго (возможно и сутки, если не дольше). Поэтому я хочу выводить результаты по нажатию на клавишу (скажем мне будет достаточно того, что thrdWork уже нашел), но при этом дальнейшая обработка мне не нужна, т.е. поток нужно убить раньше времени. Я пришел к 2 решениям:

1 решение:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void Work()
{
   thread thrdWork(Processing);
   thrdWork.detach();
 
   char cmd;
 
   while (true) {
      cin >> cmd;
 
      if (cmd == 'd')
         // отладочная информация
         // сколько и с какими параметрами найдены
         writeDebugInfo();                
      else if (cmd == 'p') {
         writeBest();
         return;
      }
   }
}
 
 
//main
   thread thrd(Work);
   thrd.join();


и 2 способ:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// main
 
   vector<thread> v_thrd;
   v_thread.push_back(thread(Processing)); // thrdWork
 
   char cmd;
 
   while (true) {
      cin >> cmd;
 
      if (cmd == 'd')
         // отладочная информация
         // сколько и с какими параметрами найдены
         writeDebugInfo();                
      else if (cmd == 'p') {
         writeBest();
         v_thrd.clear();
      }
   }


Какой метод более корректен или есть решение получше,
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.