отмена потока в android

я когда делал игру, думал что в android есть отмена потока, но когда появилась ошибка, я посмотрел и не нашел эту функцию. я использовал pthread_cancel для отмены потока. Я делаю игру на sdl2 и там используются потоки. как тогда делать? может сделать чтобы один раз поток создавался?


Ответы (1 шт):

Автор решения: Sergey

думал что в android есть отмена потока

В android - точно нет. Android - это операционная система. А pthread_cancel - это функция из библиотеки pthread. Разница между ОС и библиотекой - понятна?

По сути вопроса. Смотрим man pthread_cancel :

Функция pthread_cancel() посылает нити thread запрос отмены. Отреагирует нити назначения и когда на запрос отмены зависит от двух атрибутов, которые управляют этой нитью: состояние и тип возможности отмены.

Состояние отменяемости нити, определённое в pthread_setcancelstate(3), может быть включено (по умолчанию у новых нитей) или выключено. Если отменяемость у нити выключена, то запрос отменяемости остаётся в очереди до тех пор, пока нить не включит отменяемость. Если отменяемость у нити включена, то когда произойдёт отмена определяется типом отменяемости.

Тип отменяемости нити, определённый в pthread_setcanceltype(3), может быть асинхронным или отложенным (по умолчанию у новых нитей). Асинхронная отменяемость означает, что нить может быть отменена в любое время (обычно, немедленно, но система не гарантирует этого).

Отложенная отменяемость означает, что отмена будет задержана до тех пор, пока нить не вызовет функцию, являющуюся точкой отмены. Список функций, которые могут быть точками отмены, представлен в pthreads(7).

Резюмируя. То, что Вы вызвали pthread_cancel(), вовсе НЕ означает, что нить завершиться на самом деле. А если она и завершится, то - неизвестно когда. Обе эти особенности выполнения нити Вы должны отрегулировать самостоятельно, используя упомянутые атрибуты.

→ Ссылка