Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 18:11

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: вопросы по поводу экстренного завершения потока
СообщениеДобавлено: Пн апр 27, 2009 23:56 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
По логике вещей, под WIN для завершения процесса(то есть главного потока системы) нужно вызывать функцию ExitProcess ,
однако, в ядре СПФа в случае аварийного завершения '(EXC)' используется ExitThead для любого потока системы, в том числе и главного потока.
Вопрос в том, корректно ли это?
собственно меня вообще озадачивает ловля исключений в СПФ, ведь экстренно завершонный поток не сообщает о своем завершении главному потоку, я так понимаю никак. С другой стороны, в случае критической ошибки внутри порожденного потока системе может требоваться экстренное завершение всех потоков.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 28, 2009 11:06 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
в случае, если завершаемый поток последний, процесс завершается. это документированное поведение.
главный поток (для системы) ничем не отличается от порождённых.

mOleg писал(а):
ведь экстренно завершонный поток не сообщает о своем завершении главному потоку, я так понимаю никак

если ты опасаешься появления зомби, то всё, что накапливается (а это структура описателя потока), будет удалено после вызова GetExitCodeThread(...)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 28, 2009 11:19 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
ведь экстренно завершонный поток не сообщает о своем завершении главному потоку, я так понимаю никак

если ты опасаешься появления зомби, то всё, что накапливается (а это структура описателя потока), будет удалено после вызова GetExitCodeThread(...)[/quote]

Т. е. по завершению родительского потока завершатся и все порожденные так??


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 28, 2009 16:49 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Остановка главного потока по ExitThread не приведет к дОлжной очистке структур порождаемых ядром ОС, в случае многопоточного приложения. Есть еще TerminateProcess.
Рекомендую Дж. Рихтер почитать Windows for Professionals...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 28, 2009 17:46 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Harry писал(а):
Т. е. по завершению родительского потока завершатся и все порожденные так??

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

Alexander писал(а):
Остановка главного потока по ExitThread не приведет к дОлжной очистке структур порождаемых ядром ОС

я об этом уже сказал, после опроса статусов завершения все такие структуры прибьют.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 28, 2009 23:50 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вобщем ясно. Я сделал вместо СПФовского:
<pre>
HANDLER @ 0=
IF \ исключение в потоке, без CATCH, выдаем отчет и завершаем (~day)
DESTROY-HEAP
-1 ExitThread
THEN
</pre>
свой вариант:
<pre>
HANDLER @ IFNOT FATAL-HANDLER THEN \ если обработчик ошибок не установлен
</pre>
причем FATAL-HANDLER закрывает все потоки. Таким образом нобрабатываемое завершение в primary thread будет приводить к критическому завершению всех потоков и самого процесса.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 28, 2009 23:51 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Alexander писал(а):
Рекомендую Дж. Рихтер почитать Windows for Professionals...

если бы книга была в электонном виде (да еще и бесплатно :) а так все наше MDSN и исходники разных Форт-систем.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 29, 2009 00:33 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
http://fb2lib.net.ru/book/89563
http://fb2lib.net.ru/book/89564
http://fb2lib.net.ru/book/89561
http://fb2lib.net.ru/book/89562

http://education.aspu.ru/page.php?id=29


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 29, 2009 15:03 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
mOleg писал(а):
причем FATAL-HANDLER закрывает все потоки. Таким образом нобрабатываемое завершение в primary thread будет приводить к критическому завершению всех потоков и самого процесса


А что будет если ошибка в порожденном потоке?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 29, 2009 18:04 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Смотря - какая...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 30, 2009 00:22 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
_Harry писал(а):
А что будет если ошибка в порожденном потоке?

в нем будет собственный обработчик.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB