Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, Как завершить поток 
:(
    Опции темы
Xenya
Дата 8.8.2005, 14:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте! У меня такая ситуация: необходимо завершить поток при нажатии кнопки на форме основного процесса. Я создаю Event и делаю SetEvent и WaitForSingleObject(..., sec). Если sec делать маленькое, событие не успевает стать выделенным, и поток не передает управление (WaitForSingleObject=WAIT_TIMEOUT), а если большое, функция потока пропускает изменения в файловой системе, которые она должна отслеживать. Подскажите, пожалуйста, может, я что-то делаю не так или надо использовать другой способ синхронизации?
  Вверх
Snowy
Дата 8.8.2005, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Ничего не понятно.
Цитата(Xenya @ 8.8.2005, 14:43)
необходимо завершить поток при нажатии кнопки на форме основного процесса.

Ну и в чем вопрос? Как убить поток?
Цитата(Xenya @ 8.8.2005, 14:43)
WaitForSingleObject(..., sec)

А зачем тогда чего-то ждать? Убить и все.
Цитата(Xenya @ 8.8.2005, 14:43)
Если sec делать маленькое

Маленьким - это сколько? 50, 10, 100, 1000?
Цитата(Xenya @ 8.8.2005, 14:43)
функция потока пропускает изменения в файловой системе, которые она должна отслеживать.

Тут вообще неясно. Если мы хотим убить поток, то какая нам разница, что он что-то не отследит?
Цитата(Xenya @ 8.8.2005, 14:43)
или надо использовать другой способ синхронизации

Вероятно критические секции, если так хочется сделать sec поменьше. Критические секции требуют ресурсов процессора, соответственно выполняются быстрее.
PM MAIL   Вверх
Петрович
Дата 8.8.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



smile Блин. Я смотрю все писатели. Читателей нет.
Для кого соответствующая тема закреплена вверху именно этого раздела?


Добавлено @ 19:10
Цитата(Snowy @ 8.8.2005, 17:00)
Критические секции требуют ресурсов процессора, соответственно выполняются быстрее.

smile


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Medved
Дата 8.8.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



smile


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Snowy
Дата 9.8.2005, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата
Цитата (Snowy @ 8.8.2005, 17:00)
Критические секции требуют ресурсов процессора, соответственно выполняются быстрее. 
???

Критические секции работают не в режиме ядра. Соответственно не осуществляется переход в режим ядра и из него. Следовательно не затрачиваются ресурсы процессора на такой переход.
Я дяде Рихтеру верю. А он утверждает, что на переход в режим ядра требуется около 1000 тактов процессорного времени. Если нужно, могу попробовать найти дословную цитату, где он говорит, что критические секции работают быстрее за счет отсутствия такого перехода.
Добавлено @ 09:40
Ясно, понял. У меня очепятка. Требуют МЕНЬШЕ ресурсов процессора.
Слово пропустил...
PM MAIL   Вверх
Петрович
Дата 9.8.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



Цитата(Snowy @ 9.8.2005, 10:39)
Ясно, понял. У меня очепятка. Требуют МЕНЬШЕ ресурсов процессора.

smile
Вот теперь правильно.
Только лишь напомню, события (Event) и критические секции, это немного разные сущности. И врят ли в состоянии заменить друг друга.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Snowy
Дата 10.8.2005, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата
Только лишь напомню, события (Event) и критические секции, это немного разные сущности. И врят ли в состоянии заменить друг друга.

Обычно да. Но данная ситуация далеко не блещет ясностью.
PM MAIL   Вверх
Петрович
Дата 10.8.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



Цитата(Snowy @ 10.8.2005, 09:57)
Но данная ситуация далеко не блещет ясностью

Согласен. Но всетаки речь похоже идет о синхронизации потоков а не о защите общих данных. smile


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Snowy
Дата 10.8.2005, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата
речь похоже идет о синхронизации потоков а не о защите общих данных.

При помощи критических секций можно и синхронизацию выполнять.
PM MAIL   Вверх
Rennigth
Дата 10.8.2005, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Xenya:
кстати можешь WaitForSingleObject использовать и так
Код

   WaitForSingleObject(TreadHandle, Infinite)

и твой поток без проблем завершится


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Петрович
Дата 10.8.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



Цитата(Snowy @ 10.8.2005, 11:31)
При помощи критических секций можно и синхронизацию выполнять.

smile
Добавлено @ 13:41
Т.е. теоретически конечно можно. Только вот тогда ни о какой эффективности говорить не придется.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Snowy
Дата 10.8.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата
При помощи критических секций можно и синхронизацию выполнять.
???

Примеры есть в книге Рихтера. Часть вторая, Глава 8 - "Синхронизация потоков в пользовательском режиме"
Цитата
Т.е. теоретически конечно можно. Только вот тогда ни о какой эффективности говорить не придется.

Если временные промежутки довольно малы, то эффективность есть.
Вместо того, чтобы переходить в режим ядра мы просто можем несколько раз попытаться занять критическую секцию. Для малых временных интервалов такой подход достаточно эффективен. С увеличением временного интервала эффективность естественно снижается.
PM MAIL   Вверх
Петрович
Дата 10.8.2005, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



В принципе да. Но, в подавляющем большинстве случаев это будет уже не эффективно.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Snowy
Дата 11.8.2005, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата
В принципе да. Но, в подавляющем большинстве случаев это будет уже не эффективно.

Согласен. Просто в вопросе мало, что ясно.
Цитата(Xenya @ 8.8.2005, 14:43)
Если sec делать маленькое, событие не успевает стать выделенным

Отсюда и мысль про короткие интервалы.
Но думаю, яснее не станет, ввиду отсутсвия у автора интереса к этому топику...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.