Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, MaximE, Вы писали:
>>> ME>Вывод из этого следующий: ты просто не можешь прервать выполнение любого потока в произвольной точке и перевести управление при помощи исключения в другую точку, ожидая при этом, что состояние структур данных сохранит инвариант и останется в каком-либо относительно корректном состоянии.
К>Давайте вспомним исходную задачу: К>Ведомый поток зависает в какой-то системной функции. Хочется вышибить его оттуда наименее болезненным способом. К>TerminateThread() (или даже exit()) — заведомо худший вариант.
Если исходный поток "зависает" в какой-то системной функции, то таким макаром его нельзя вышибить (во всяком
случае в винде). Все дело в том, что такой поток исключается из очереди готовности (ready queue) и переводится
в waiting queue. Обратно он будет переведен, только после того, как сработает соотв. ожидаемый объект, или истечет
время заданное sleep'ом.
Так что реальное использование такой методы очень сомнительно и небезопасно.
ЗЫ
Проверил на Sleep'е — исключение возникает только после истечения соотв. времени ожидания...