![]() |
Ответ программы на запросы пользователя
Здравствуйте! Написал ресурсоемкое приложение выполняющее преобразование файлов из директории. В которой ну очень много файлов. При этом программа помещает в оперативную память просмотренные записи. Просматривая следующую запись, она проверяет на возможность дублирования этой записи. ...
Вопрос следующий. Как можно предусмотреть возможность остановки упомянутого процесса. Просто добавить кнопочку, которая при нажатии на неё меняет значение некоторой переменной (которую постоянно проверяет выполняющийся код программы) не получается. Приложение при запуске описанного процесса как бы вешается, то есть не отвечает на запросы пока не выполнит вышеупомянутые действия. Подскажите, пожалуйста, как быть? Так же хочется, что бы окно программы не зависало. |
Надо создать второй поток для этого процесса преобразования. А дальше копать в сторону синхронизации потоков. Например, можно создать mutex с помощью CreateMutex, затем в цикле обработки файлов можно попытаться захватить его и сразу отпустить функциями WaitForSingleObject и ReleaseMutex, а при нажатии на кнопку стоит просто попытаться захватить его той же WaitForSingleObject, тогда процесс преобразвания файлов остановится на своем вызове WaitForSingleObject.
|
Kerbit
Что-то уж больно накручено у вас,как мне кажется. EvgeniyQQQ Мне это представляется следующим образом. Создаётся дополнительный поток функцией CreateThread,который выполняет в цикле ресурсоёмкую работу.При этом он постоянно проверяет состояние глобальной переменной. Нажатие кнопки обрабатывается в оконной функции главного потока,в ходе чего глобальная переменная инициализируется значением TRUE.Здесь можно вызвать функцию WaitForSingleObject,передав ей описатель дополнительного потока.Тогда дополнительный поток,проверив в очередной раз значение глобальной переменной,производит необходимые действия(типа освобождения использованных ресурсов) и завершается.В ответ на это функция WaitForSingleObject,которую мы вызвали в главном потоке,возвращается.Ну,и дальше уже по смыслу программы. |
Kerbit, DillerInc, спасибо!
Проблема была решена добавлением в цикл преобразования файлов обработчика сообщений: Код:
MSG message; |
Время: 11:07. |
Время: 11:07.
© OSzone.net 2001-