![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Xenya |
|
|||
|
Unregistered |
Здравствуйте! У меня такая ситуация: необходимо завершить поток при нажатии кнопки на форме основного процесса. Я создаю Event и делаю SetEvent и WaitForSingleObject(..., sec). Если sec делать маленькое, событие не успевает стать выделенным, и поток не передает управление (WaitForSingleObject=WAIT_TIMEOUT), а если большое, функция потока пропускает изменения в файловой системе, которые она должна отслеживать. Подскажите, пожалуйста, может, я что-то делаю не так или надо использовать другой способ синхронизации?
|
|||
|
||||
| Snowy |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Ничего не понятно.
Ну и в чем вопрос? Как убить поток?
А зачем тогда чего-то ждать? Убить и все.
Маленьким - это сколько? 50, 10, 100, 1000?
Тут вообще неясно. Если мы хотим убить поток, то какая нам разница, что он что-то не отследит?
Вероятно критические секции, если так хочется сделать sec поменьше. Критические секции требуют ресурсов процессора, соответственно выполняются быстрее. |
||||||||||
|
|||||||||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Для кого соответствующая тема закреплена вверху именно этого раздела? Добавлено @ 19:10
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
-------------------- |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Критические секции работают не в режиме ядра. Соответственно не осуществляется переход в режим ядра и из него. Следовательно не затрачиваются ресурсы процессора на такой переход. Я дяде Рихтеру верю. А он утверждает, что на переход в режим ядра требуется около 1000 тактов процессорного времени. Если нужно, могу попробовать найти дословную цитату, где он говорит, что критические секции работают быстрее за счет отсутствия такого перехода. Добавлено @ 09:40 Ясно, понял. У меня очепятка. Требуют МЕНЬШЕ ресурсов процессора. Слово пропустил... |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Вот теперь правильно. Только лишь напомню, события (Event) и критические секции, это немного разные сущности. И врят ли в состоянии заменить друг друга. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Обычно да. Но данная ситуация далеко не блещет ясностью. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Согласен. Но всетаки речь похоже идет о синхронизации потоков а не о защите общих данных. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
При помощи критических секций можно и синхронизацию выполнять. |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Xenya:
кстати можешь WaitForSingleObject использовать и так
и твой поток без проблем завершится -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Добавлено @ 13:41 Т.е. теоретически конечно можно. Только вот тогда ни о какой эффективности говорить не придется. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Примеры есть в книге Рихтера. Часть вторая, Глава 8 - "Синхронизация потоков в пользовательском режиме"
Если временные промежутки довольно малы, то эффективность есть. Вместо того, чтобы переходить в режим ядра мы просто можем несколько раз попытаться занять критическую секцию. Для малых временных интервалов такой подход достаточно эффективен. С увеличением временного интервала эффективность естественно снижается. |
||||
|
|||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
В принципе да. Но, в подавляющем большинстве случаев это будет уже не эффективно.
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Согласен. Просто в вопросе мало, что ясно.
Отсюда и мысль про короткие интервалы. Но думаю, яснее не станет, ввиду отсутсвия у автора интереса к этому топику... |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |