Helpers - компьютеры, интернет, программирование

Цель C: как убить поток, находясь в другом потоке в Objective-C?

Я пытался настроить многопоточное приложение. Один из потоков работает как фон для передачи данных. Прямо сейчас этот поток автоматически убивает себя после того, как работа сделана. Как-то мне нужно убить этот поток в другом потоке, чтобы немедленно остановить его работу. Есть ли какой-нибудь API или метод для этого?


Ответы:


1

bbum правильный, вы не хотите просто убивать поток. Вы можете более безопасно убить процесс, потому что он изолирован от остальной системы. Поскольку поток разделяет память и ресурсы с остальным процессом, его прекращение может привести к разного рода проблемам.

Итак, что ты должен делать?

Единственный правильный способ справиться с этим - иметь возможность, чтобы ваш основной поток отправлял сообщение рабочему потоку, предлагая ему выйти. Рабочий поток должен периодически проверять наличие этого сообщения и добровольно завершать работу.

Легкий способ сделать это - использовать флаг, логическую переменную, доступную для обоих потоков. Однако, если у вас несколько рабочих потоков, вам может понадобиться что-то более сложное.

18.12.2009
  • Я попытался добавить логический флаг, позволяющий потоку завершаться по exit (0). Но из-за того, что я не знаком с многопоточным развертыванием в Iphone, я не знаю, сработает ли логический флаг вовремя. Есть ли идея сделать это немедленно? 18.12.2009
  • Не вызывайте exit(), это убьет весь процесс. Просто позвольте основной функции потока завершиться естественным образом, вызвав return. Если вам нужно, чтобы он быстрее отвечал на запрос завершения, рабочий поток должен чаще проверять флаг. 19.12.2009

  • 2

    Разве это не плохая идея? (Если другой поток выполняет что-то в критическом разделе, он может оставить материал в несогласованном состоянии.) Не могли бы вы просто установить некоторую переменную общего флага и попросить другой поток периодически проверять ее, чтобы убедиться, что она следует остановиться?

    18.12.2009

    3

    Вы могли бы передавать сообщения между передним и фоновым потоками, потенциально используя что-то вроде this, чтобы облегчить передачу сообщений.

    18.12.2009
  • Спасибо за ваши рекомендации. Что помогает. 18.12.2009

  • 4

    Если вы используете pthread, попробуйте использовать pthread_kill, я уже давно пробовал, это не сработало для меня, в основном, если поток находится в каком-то блокирующем вызове, он не сработает.

    Это правда, что убивать поток - не лучший вариант, если вы ищете какое-то решение для какой-то проблемы, вы можете попробовать это.

    18.12.2009

    5

    На мой взгляд, лучше позволить потоку идти своим чередом естественным образом. Трудно дать гарантии относительно эффекта от попытки убить поток.

    04.11.2010

    6
  • Я понял. Спасибо за вашу рекомендацию. Есть ли способ как можно скорее завершить поток B, пока поток A этого хочет? 18.12.2009
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..