5 / 5 / 1
Регистрация: 24.04.2011
Сообщений: 153
|
|
1 | |
Пауза FindFirstFile12.06.2012, 21:50. Показов 1307. Ответов 7
Метки нет Все метки)
(
Хочется выслушать совет бывадых программеров - как сделать паузу или остановку рекурсивной процедуры, основанной на FindFirstFile и FindNextFile, по нажатию кнопки в форме Visual c++?!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
12.06.2012, 21:50 | |
Ответы с готовыми решениями:
7
работа с функцией FindFirstFile (API) Windows.h добавлен FindFirstFile не найден Как запустить пример для FindFirstFile FindFirstFile -получение корректного имени файла |
![]() ![]() |
|
12.06.2012, 22:11 | 2 |
Грубо говоря, у тебя есть некое длительное действие программы и хочется, чтобы пользователь мог прервать это действие. Здесь есть два способа.
1. В процессе длительного действия периодически опрашивать "а не нажал ли пользователь на кнопку" 2. Длительное действие запускать в отдельном потоке, а по нажатию на кнопку поток прибить. Конкретно в твоём случае длительное действие представляет собой обращение к операционной системе. Это действие твоя программа не может контролировать никак. Если в каталоге очень много файлов или каталог находится на сетевом диске или ещё по каким-то причинам сие действие может выполняться долго, а потому программа в этом месте будет висеть. Значит, первый пункт не поможет, а поможет пункт второй. В своей программе я именно так и делал. Процесс скачивания файла из инета выделен в поток, а всё остальное (фактически отрисовка gui) - в главном процессе
1
|
Заблокирован
![]() |
||||||
12.06.2012, 22:38 | 3 | |||||
Mustang92, собственно писал срузу здесь в редакторе, но в целом логика и вызовы верны. Вот некая абстрагированая реализация организации нити поиска и проверки нажатия нужного ключа в основном потоке для NT-платформы. Распараллеливание, как видишь, реализовал через Критическую секцию. Для её поддержки проект должен содержать process.h а также в опциях линковщика выставить поддержку run-time library Multythreaded
Собственно код ниже
1
|
![]() ![]() |
|
13.06.2012, 00:51 | 4 |
-=ЮрА=-, твоя схема будет не будет адэкватно работать, если внутри FindFiles будут тормоза. Твой поток будет ровно так же висеть в ожидании завершения тормозов, как висит и основной процесс у ТС'а (в противном случае он навряд ли бы задал этот вопрос)
0
|
Заблокирован
![]() |
|
13.06.2012, 07:29 | 5 |
Evg, я понял о чем ты от замораживания программы спасаюсь с помощью PumpMessages.Один из моих диспетчеров уже позволчет производить навигацию в то время как несколько thread-нитей(по числу логических томов) ищут файлы.Единственным отдичием этого диспетчера является то что в памяти держу не WIN32_FIND_DATA а массив LPCITEMLIST как менее тяжеловесный при хранении
0
|
![]() ![]() |
|
13.06.2012, 09:39 | 6 |
В данном случае я не совсем про замораживание. В твоём подходе программа замораживаться не будет, т.к. поиск идёт в потоке. Но у неё будет заторможенная реакция на действие пользователя "отменить построение списка файлов"
0
|
5 / 5 / 1
Регистрация: 24.04.2011
Сообщений: 153
|
|
13.06.2012, 12:17 [ТС] | 7 |
в антивирусах по-моему именно такая система заложена - при проверки файлов, при нажатии на кнопку в приложении "стоп" они не сразу останавливаются
0
|
![]() ![]() |
|
13.06.2012, 15:41 | 8 |
Антивирус - это НЕ просто приложение пользовательского уровня. Это софтина, которая ковыряется в системных файлах, а потому если операцию прервать посередине, то можно поломать операционку. Так что в антивирусах такое поведение имеет совсем другие причины.
Чтение списка файлов или скачивание данных из инета - безопасная операция, а потому её можно прерывать в любой момент
0
|
13.06.2012, 15:41 | |
Помогаю со студенческими работами здесь
8
Как правильно передать в FindFirstFile путь к директории?
пауза консольного приложения Пауза при работе программы. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |