powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Приостановка программы пока формируется файл
8 сообщений из 8, страница 1 из 1
Приостановка программы пока формируется файл
    #33517718
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дали мне проект на доработку, и что-то мне один цикл как-то не внушает доверия.

Перед этим циклом запускается оператор для конвертации word файла в pdf (файл посылается на печать на виртуальный принтер, который формирует pdf -ки).

ниже описанный цикл используется для того, чтобы программа ждала, пока файл сформируется. Т.е. он исполняется до тех пор, пока не появится файл.

Мне, как чайнику и самонедоучке, интересно - это нормальный способ или все-таки что-то есть получше?



Код: plaintext
1.
2.
3.
do while not fileExists(ls_fileNamePdf)
	yield()
loop
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33518267
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, если работает, значит нормальный способ!
Мы использовали задержку в 3 сек. (на экране загоралось красивое окошко "Формирование файла").
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33518422
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tea-potМне, как чайнику и самонедоучке, интересно - это нормальный способ или все-таки что-то есть получше?

Я не проверял, но предполагаю что в таком виде будет замедление процесса за счет частого обращения к файловой системе.
Я бы сделал проверку FileExist раз в 0.5 сек, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
do while true
    if Mod(Cpu(),  500 ) =  0  then
       if fileExists(ls_fileNamePdf) then 
           exit
       end if
    end if
    yield()
loop
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33518431
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и конечно в том цикле нет проверки не отменил ли пользователь операцию.
В таком случае цикл - не завершится, так как файл не будет создан.
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33519425
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Я бы сделал проверку FileExist раз в 0.5 сек, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
do while true
    if Mod(Cpu(),  500 ) =  0  then
       if fileExists(ls_fileNamePdf) then 
           exit
       end if
    end if
    yield()
loop

в этот иф вообще можно не попасть ...
никто не гарантирует "Mod(Cpu(), 500) = 0"
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33519674
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuzu Anatoly Moskovsky
Я бы сделал проверку FileExist раз в 0.5 сек, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
do while true
    if Mod(Cpu(),  500 ) =  0  then
       if fileExists(ls_fileNamePdf) then 
           exit
       end if
    end if
    yield()
loop

в этот иф вообще можно не попасть ...
никто не гарантирует "Mod(Cpu(), 500) = 0"
Согласен :)
Но принцип ясен и так
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33519947
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tea-potМне, как чайнику и самонедоучке, интересно - это нормальный способ или все-таки что-то есть получше?

Код: plaintext
1.
2.
3.
do while not fileExists(ls_fileNamePdf)
	yield()
loop


Есть несколько моментов.
1. Самое опасное, это то, что приложение в этом режиме полностью работоспособно, т.е. юзер может жать все, до чего дотянется, и это сработает. Обычно ведет к свалу.
2. Загрузка процессора будет 100%
3. Если процесс умер до создания файла-семафора, то ждать долго придется.

Я бы сделал респонс-окно для блокировки интерфейса, в котором повесил бы кнопку отмены и реакцию на попытки закрытия окна юзером. Вместо yield использовал бы sleep из winapi.
А еще лучше пускать процесс через winapi CreateProcess, тогда можно контролировать процесс: жив ли он, прибили ли его и т.п. Тогда и семафор в виде файла не понадобится.
...
Рейтинг: 0 / 0
Приостановка программы пока формируется файл
    #33520145
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg1А еще лучше пускать процесс через winapi CreateProcess, тогда можно контролировать процесс: жив ли он, прибили ли его и т.п.
...я б тоже так делал, ну и про WaitForSingleObject не забыть.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Приостановка программы пока формируется файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]