|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|||||||||||
Корректно убить поток21.10.2015, 09:42. Показов 3964. Ответов 27
Метки нет (Все метки)
Пусть имеется поток thrdWork, который обрабатывает большие данные. В результате этой работы в памяти каждый раз сохраняются наиболее лучшие результаты. Т.к. эти результаты перезаписываются, то вывод их в файл возможен по окончанию обработки данных, что не реально долго (возможно и сутки, если не дольше). Поэтому я хочу выводить результаты по нажатию на клавишу (скажем мне будет достаточно того, что thrdWork уже нашел), но при этом дальнейшая обработка мне не нужна, т.е. поток нужно убить раньше времени. Я пришел к 2 решениям:
1 решение: Кликните здесь для просмотра всего текста
и 2 способ: Кликните здесь для просмотра всего текста
Какой метод более корректен или есть решение получше,
0
|
|||||||||||
| 21.10.2015, 09:42 | |
|
Ответы с готовыми решениями:
27
Можно ли убить поток (pthread) сигналом (kill()) ? Можно ли убить поток зная лишь то что он запускается последним? Сокеты и QThread - как корректно завершить поток |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 21.10.2015, 10:12 | |
|
Никакой. Нельзя прерывать поток принудительно. Ты же не знаешь, на какой стадии он прервётся, может, и данные будут некорректные после этого. Используй средства синхронизации, чтобы поток сам завершался при определённых условиях.
0
|
|
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
| 21.10.2015, 10:38 [ТС] | |
|
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 21.10.2015, 11:06 | |
|
Дело не в глобальности, а в целостности. Например, 2 переменные запишет, а третью не успеет - она будет старое значение содержать и т. п.
1
|
|
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
| 21.10.2015, 11:12 [ТС] | |
|
Согласен. Тогда каждый раз буду опрашивать переменную, отвечающую за завершение потока.
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
| 21.10.2015, 11:32 | |
|
Если под Линуксом, то там есть pthread_cancel, вызывающий процесс схожий с броском исключения из вызванной в потоке cancellation point функции (без cancellation point не заработает). Под gcc этот "процесс" вроде как в исключение и преобразуется. Но вообще изврат, так как по сути выходит что сишные функции начинают плеваться исключениями.
0
|
|
|
Native x86
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
|
| 21.10.2015, 11:34 | |
|
0
|
|
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
| 21.10.2015, 11:42 [ТС] | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 21.10.2015, 20:05 | |
|
никак.
единственный способ потоку корректно завершиться - умереть естественной смертью. обычно делают так: потоки у себя в каком то цикле крутятся, и проверяют неккий атомарный флажок. если true, значит хотят закрыть лавочку снаружи. и поток корректно брякается из своей функции.
0
|
|
|
Native x86
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 22.10.2015, 17:08 | ||
|
0
|
||
|
Native x86
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 22.10.2015, 17:28 | ||
|
У вас есть другое мнение? Пожалуйста, высказывайтесь.
0
|
||
| 22.10.2015, 17:44 | |
|
При использовании volatile в многопоточной среде никто ничего не гарантирует.
Более подробно смотрите cv (const and volatile) type qualifiers,Concurrency: Atomic and volatile in C++11 memory model То что вы говорите это хаки завязанные на реализацию bool, volatile в конкретных компиляторах на конкретных архитектурах.
0
|
|
|
Native x86
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 22.10.2015, 18:05 | ||
|
0
|
||
| 22.10.2015, 18:20 | |||
|
0
|
|||
|
Native x86
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||||
| 22.10.2015, 18:41 | ||||
|
0
|
||||
| 22.10.2015, 19:02 | |||||
|
0
|
|||||
|
Native x86
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||||
| 23.10.2015, 12:26 | ||||
|
Что касается алениной информации о возможной неатомарности BOOL, то это, не имеет ни малейшего значения. Будь запись хоть сто раз не атомарной, все равно момент, когда переменная из "ноль" превращается в "не ноль", атомарен по определению.
0
|
||||
|
|
||
| 27.10.2015, 18:34 | ||
|
См. Архитектура многопоточного приложения, Нужно ли синхронизировать доступ к переменной из двух потоков? Кстати в boost есть interupt() для прерывания.
0
|
||
| 27.10.2015, 18:34 | |
|
Помогаю со студенческими работами здесь
20
Убить поток в адаптере
Убить спящий поток Как убить поток в CountDownTimer? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|