TL; DR версия: у меня две темы. Одному из них может потребоваться Interrupt () другого, но только если другой поток находится в середине обработки данных, связанных с объектом, на который влияет первый поток. Как я могу только прервать () второй поток на основе определенных условий.
Я работал над программой, которая раскручивает два потока для обработки данных сокета и обновления графического интерфейса с информацией. Два потока (topologyThread и dataThread) обрабатывают два различных аспекта моего приложения, а именно уведомления об изменении топологии для нашей беспроводной сенсорной сети и информацию о данных для получения и обработки данных из беспроводной сенсорной сети.
Когда данные поступают в dataThread, возможно, что член сети, который представляет пакет данных, уже был удален topologyThread и поэтому не должен обрабатываться. Итак, я подумал, что использование метода Thread.Interrupt () позволило бы мне мгновенно уведомить dataThread об изменениях в топологии и предотвратить некоторые проблемы, с которыми мы столкнулись при попытке обновить графический интерфейс пользователя данными для члена сети, который является больше не подключен. У меня такой вопрос: как я могу определить, нужно ли прерывать dataThread? Я не хочу, чтобы он выдавал исключение во время обработки данных для члена сети, который все еще подключен, но я хочу, чтобы он прерывался, если он находится в середине обработки данных для члена сети, который затем отключается.
Сценарий 1:
- Данные поступают на dataThread.
- dataThread гарантирует, что член сети по-прежнему является частью сети.
- dataThread обрабатывает данные до конца и обновляет графический интерфейс
Сценарий 2:
- Данные поступают на dataThread.
- dataThread гарантирует, что член сети по-прежнему является частью сети.
- Участник сети отключен, поэтому обработка не производится.
Сценарий 3:
- Данные поступают на dataThread.
- dataThread гарантирует, что член сети по-прежнему является частью сети.
- dataThread начинает обработку данных
- topologyThread получает уведомление о том, что участник сети отключен, и удаляет его из топологии.
- dataThread пытается обновить графический интерфейс для участника сети, который больше не подключен.
Это сценарий 3, для которого я пытаюсь написать код. В нашем тестировании в этом сценарии древовидное представление на боковой панели зависает и приложение должно быть убито. Но мне нужно прервать dataThread только в том случае, если объект, на который влияет topologyThread, является объектом, на который в данный момент действует dataThread.
Спасибо за чтение. :)