Форум » [x]Harbour » Как "заморозить" выполнение программы ? » Ответить

Как "заморозить" выполнение программы ?

Andrey: Всем привет. Подскажите как можно остановить (заморозить) выполнение программы до выполнения определенного события в другой программе ? Т.е. я из своей программы на хХарборе (терминалка) запускаю допустим программу "Скачивания из инета" на МиниГуи. Терминалку на хХарборе нужно "заморозить" до конца скачивания ! Иначе ЮЗВЕР будет тыкать мышкой раньше времени.... После того как скачался файл нужно вернуться обратно в терминалку на хХарборе ! Можно конечно сделать "семафорный файл" после получения файла из инета, а в хХарборе проверять каждую минуту есть такой файл или нет. Но это можно было делать и на Клипере (проверку файла). А что нам может предложить хХарбор ?

Ответов - 44, стр: 1 2 3 All

Andrey: Avf пишет: Пришлось изменять старые программы, не переписаннные в GUI. xHarbour Compiler build 1.2.1 Попробуй 1.2.3 - в предыдущем ошибок много... Avf пишет: Либо подскажите, пожалуйста, где что не так в EXECANDWAIT для такой связки( не вызывается внешняя программа) : Она вызывается, просто на экране не отображается. Читай выше - я столкнулся с этим. Avf пишет: После вызова WAITRUNTERM( не восстанавливается экран после выхода из внешней программы). Сделай проще: SAVE SCREEN WAITRUNTERM(cFile) RESTORE SCREEN

Avf: Вариант с WAITRUNTERM работает на XHarbour EXECANDWAIT, приведенный выше для Harbour, для ХHarbour должен выглядеть как-то иначе.

Andrey: Andrey пишет: Хорошую вещь сделал Pasha - функцию EXECANDWAIT в http://clipper.borda.ru/?1-4-0-00000327-000-10001-0-1250159714 Только сейчас оценил. Можно вызвать через батник Notepad или WinWord и пока не завершишь работу в них, программа "заморожена" !!! Программа на терминалке хХарбора 1.2.3 Делаю показ надписи и вызываю программу на МиниГуи: [pre2]@ 10,10 SAY "Загружаю модуль ХХХ !" EXECANDWAIT(CurDrive()+":"+DirName()+"\XXX-MiniGui.exe")[/pre2] Как можно сделать замену надписи в терминалке через 10-15 сек на другую ? [pre2]@ 10,10 SAY "Ожидаю закрытия модуля ХХХ !"[/pre2]


Dima: На вскидку... 1. Поток 2. FT_OnTick 3. HB_IdleAdd

Andrey: Dima пишет: 2. FT_OnTick 3. HB_IdleAdd Не работал с этим. Подскажи пожалуйста как это работает ?

PSP: Может просто написать: "Запущено внешнее приложение XXX. Чтобы продолжить, закройте его", а?))

Andrey: PSP пишет: Может просто написать: "Запущено внешнее приложение XXX. Чтобы продолжить, закройте его", а?)) Пока прога на МиниГуи загрузится... Антивирусник его постоянно проверяет, проходит секунд 10. Пользователь тупо пытается нажать ещё раз и раз на кнопку. Из-за этого и вывесил сообщение. Твоя надпись будет нервировать неподготовленного пользователя. Конечно в МиниГуи приложение можно после запуска отправить терминалке сообщение как в примере: * Передача сообщений между приложениями/процессами при помощи сообщения WM_COPYDATA. Но для простой вещи это перебор... Нужно просто через 10-15 секунд изменить надпись.

fil: а таймер незя ?

Andrey: fil пишет: а таймер незя ? А как в хХарборе делать таймер ? Я уже не помню как делать. В Клипере что-то в СТ было, а как сейчас делать не знаю.

Dima: Andrey пишет: А как в хХарборе делать таймер ? http://clipper.borda.ru/?1-4-0-00001192-000-0-0-1498420920 Пост 1539 По Ft_ontick FT_OnTick({|| Mytest() },200) @ 10,10 SAY "Загружаю модуль ХХХ !" EXECANDWAIT(CurDrive()+":"+DirName()+"\XXX-MiniGui.exe") FT_OnTick() Func Mytest() @ 10,10 SAY "Ожидаю закрытия модуля ХХХ !" return nil

Haz: Andrey пишет: Пользователь тупо пытается нажать ещё раз и раз на кнопку. Из-за этого и вывесил сообщение Проще кнопку задисаблить после нажатия, и сообщение что запущено внешнее приложение Х... А при завешении этой Х.. - раздисаблить и убрать сообщение

SergKis: Haz сохранил экран\сделал новый с крупным письмом типа "Ж Д И Т Е ...", потом все воссстановил. Все время так делаю. Пользователь не такой тупой, все понимает, пусть и не с первого раза.

Dima: Можно еще "вертушку" повесить , пока работает внешнее приложение Х , что бы юзер не подумал что прога висит

Andrey: Haz пишет: Проще кнопку задисаблить после нажатия, и сообщение что запущено внешнее приложение Х... А при завешении этой Х.. - раздисаблить и убрать сообщение Нет у меня такого на хХарборе. Dima Спасибо !

Haz: Andrey пишет: Нет у меня такого на хХарборе Не верю (с). Но раз нет, так нет и искать не будем среди множества вариантов.

Dima: Haz пишет: Не верю (с). +1

Dima: Hbnf для иксов Libnf

Dima: чего ж нет если есть в xharbour\contrib\libnf\ontick.c

Dima: Попробуй портировать из Harbour Сырец [pre2] THREAD STATIC t_bOnTick THREAD STATIC t_nTickInterval := 0 THREAD STATIC t_nLastCheck := 0 THREAD STATIC t_hIdle STATIC PROCEDURE __ft_OnTick() IF hb_MilliSeconds() >= ( t_nLastCheck + t_nTickInterval ) t_nLastCheck := hb_MilliSeconds() Eval( t_bOnTick ) ENDIF RETURN PROCEDURE ft_OnTick( bOnTick, nTickInterval ) /* Harbour extension: Harbour will also accept function pointers */ IF HB_ISEVALITEM( bOnTick ) t_bOnTick := bOnTick IF HB_ISNUMERIC( nTickInterval ) t_nTickInterval := ( 1 / 18.20648 ) * nTickInterval * 1000 ENDIF t_nLastCheck := hb_MilliSeconds() IF Empty( t_hIdle ) t_hIdle := hb_idleAdd( {|| __ft_OnTick() } ) ENDIF ELSE t_bOnTick := NIL t_nTickInterval := 0 IF ! Empty( t_hIdle ) hb_idleDel( t_hIdle ) t_hIdle := NIL ENDIF ENDIF RETURN [/pre2]

Dima: Andrey пишет: Я думаю, что не пойдёт из за: убери THREAD , думаю не смертельно



полная версия страницы