{ cout « “Exiting via Interrup
Автор admin Пятница, 26 июня 2009 11:32
{ cout « “Exiting via Interrupted_Exception” « endl; } } }: int main(int argc. char* argv[]) { if(argc != 2) { cerr « “usage: ” « argv[0] Кооперация между программными потоками 569 int delay = atoi(argv[l]): try { Thread t(new Blocked3): Thread::sleep(delay); t.interruptO; } catch(Synchromzation_Exception& e) { cerr « e.whatO « endl: } } ///:- Класс NeedsCleanup подчеркивает необходимость освобождения ресурсов при выходе из цикла через исключение. Обратите внимание на то, что в Blocked3::run() не определяются указатели, потому что по соображениям безопасности исключений все ресурсы должны инкапсулироваться в стековых объектах, чтобы обработчик исключений мог автоматически освободить их вызовом деструктора. В командной строке программе передается аргумент, определяющий время задержки в миллисекундах перед вызовом interrupt(). Используя разные задержки, можно выйти из Blocked3::run() в разных точках цикла: в блокирующем вызове sleep() и в неблокирующих математических вычислениях. Вы увидите, что при вызове interrupt() после метки point2 (во время неблокирующей операции) сначала завершается цикл, затем у
Комментарии закрыты.
Последние комментарии