Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Detached Threads

4.9K
28 февраля 2009 года
efferson
57 / / 08.12.2005
Подскажите, есть ли в .NET detached threads - трэды, не требующие подсоединения к основному процессу по завершению своей работы? Если нет, то можно ли какими-нибудь обходными путями создать нечто подобное?
5
28 февраля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: efferson
трэды, не требующие подсоединения к основному процессу по завершению своей работы?

С этого места по подробнее. Сдается мне, вы несколько не понимаете модели потоков Windows.

4.9K
02 марта 2009 года
efferson
57 / / 08.12.2005
Возможно вы правы. На сколько мне известно в POSIX трэдах основной процесс должен обязательно присоединить, созданный им трэд. Если этого не сделать трэд завершиться сам по завершению основной програмы. Трэды в Windows устроены иначе?
5
02 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: efferson
Возможно вы правы. На сколько мне известно в POSIX трэдах основной процесс должен обязательно присоединить, созданный им трэд. Если этого не сделать трэд завершиться сам по завершению основной програмы. Трэды в Windows устроены иначе?

Кратко.
Единица исполнения кода в Windows - поток (thread). Тогда как процесс (process) - единица заявки на ресурсы ОС (хэндлы на файлы, объекты синхронизации, сокеты и прочее). При запуске процесса автоматически создается один поток исполнения (в котором выполняется функция int main(char* argv[], int argc)), ОС завершает процесс после выхода из main, если же были другие потоки, то они также будут автоматически завершены.

Обычно, поток в Windows исполняется до тех пор, пока не произойдет выход из функции этого потока, но в принципе его можно насильно завершить специальными АПИ (TerminateThread).

Дождаться завершения потока можно стандартной функцией WaitForSingleObject, передав ей хэндл на поток. Для более сложной синхронизации потоков нужно пользоваться примитивами типа семафора, мутекса, ивента, думаю с их семантикой вы знакомы.


В .NET поведение программы аналогично, разве что есть удобная объектно-ориентированная обертка (классы Thread, Semaphore и др.).

4.9K
02 марта 2009 года
efferson
57 / / 08.12.2005
Хм... спасибо :)
5
02 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: efferson
Хм... спасибо :)


А вообще в .NET есть домены приложений (AppDomains) предназначенные для программной изоляции кода. Домен приложения сродни процессу в ОС, но исполняется в рамках самого процесса. По-умолчанию при запуске .NET процесса создается Default-домен приложения, но никто не мешает создать дочерние домены (например для изолированного исполнения недоверенного кода).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог