2009-08-24 4 views
2

Я немного расстроен определением Thread Termination, которое у них есть на Symbian. Пожалуйста, исправьте меня, если я ошибаюсь. Темы в Symbian OS могут заканчиваться на 4 разных способах:Закрытие темы в Symbian

  1. Когда функция потока выходит нормально;
  2. Когда пользователь :: Exit() вызывается для текущего потока;
  3. Когда поток вынужден умирать, вызывая RThread :: Kill() или RThread :: Terminate();
  4. Когда паника была поднята на резьбе Пользователем :: Panic

Мой вопрос: какой из этих четырех ситуаций соответствует «завершения потока»?

PS: Я придумал этот вопрос, исследуя определение «критических потоков» в документации по Symbian. Может быть, это может быть полезно extract.

ответ

2

Все они. SDK documentation определяет его довольно точно:

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

Теперь, если вы осматривая RThread::ExitType, вы найдете следующую информацию:

EExitKill нить или процесс закончился в результате убийства, т.е. Kill() был вызван на RThread или RProcess ручка. Или поток был завершен в результате вызова User::Exit().

EExitTerminate нить или процесс закончился в результате прекращается, т.е. Terminate() был назван на RThread или RProcess ручкой.

EExitPanic Поток или процесс были в панике.

EExitPending Нить или процесс живой.

Для случаев 1, 2 и Kill в случае 3 вы получите EExitKill. Другие случаи вполне понятны.

+0

>>> Для случаев 1, 2 и Kill в случае 3 вы получите EExitKill Если это так, то было бы невозможно определить, умер ли поток нормально, хотя выход функции потока. Это имеет решающее значение, поскольку в случае ненормального завершения потоки ресурсов не располагаются должным образом. – nixau

+0

Убить нормальное завершение; Завершение является ненормальным. – laalto

+0

Документация SDK гласит, что между ними нет разницы - просто логично, Kill - хороший парень, а Terminate - средний. Разница появляется только в категории ExitType. – nixau