| Автор | Сообщение |
|
|
| |
Пост N: 176
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 04:59. Заголовок: Achoice() Dbedit() - таймер ожидания
|
 |

|
|
Ответов - 12
[только новые]
|
|
|
|
| |
Пост N: 177
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 05:03. Заголовок: Добрый день, коллеги..
Добрый день, коллеги. Возникла необходимость поставить таймер ожидания. Если Пользователь не работает сделать штатный выход из программы. Как передать параметр в пользовательскую функцию... или сделать выход по таймеру.
|
 |

|
|
|
| постоянный участник
|
Пост N: 8043
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.09.25 08:29. Заголовок: Oskar_AAA пишет: Ес..
Oskar_AAA пишет: | цитата: | | Если Пользователь не работает |
| Поясните это ? Не работает за программой 5, 10 минут, 1 час ? А вдруг юзер отложил просто программу и занят другой работой на компе, это считается ? А запуск отчетов, если долго считаются - тогда таймер нужно отключать ?
|
 |

|
|
|
| |
Пост N: 178
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 09:03. Заголовок: Если Пользователь не..
Если Пользователь не работает с программой 5,10,30 итд минут. Это в диалоговых режимах (выбор отчета в меню и/или просмотр отчета итд). Если выбран отчет - то формируется отчет и не важно сколько времени уйдет на его формирование. То есть нужно "засунуть" INKEY(60) в Пользовательскую функцию Achice() b Dbedit().
|
 |

|
|
|
| |
Пост N: 179
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 09:18. Заголовок: Пользователь отложил..
Пользователь отложил работу с программой, занят другими делами итд. А программа (диалоговый режим) просто ждет нажатия клавиши из спсика допустимых (Enter - выбор, Esc - выход итд....) то есть если нет нажатия клавиши из списка допустимых, то выход из этого меню (или программы с закрытием открытых файлов БД, то есть QUIT)
|
 |

|
|
|
| постоянный участник
|
Пост N: 8044
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.09.25 09:33. Заголовок: Тоже с этим мучаюсь ..
Тоже с этим мучаюсь - https://clipper.borda.ru/?1-3-0-00000702-000-0-0#002.002.001 Но у тебя попроще. У меня примерно такое есть в терминалке на хХарборе. Но у меня если 5 минут нет реакции пользователя, то программа начинает играть в квадратики - режим ожидания. Везде где в проге ожидание ставлю: LK := Inkey( 10, INKEY_ALL ) lKeyMouse := MLEFTDOWN() IF lKeyMouse ... здесь проверка нажатых координат ENDIF IF LK == 0 cCol7 := SetColor() IF M->SetScreen == .T. nTime2 := Seconds() nSeconds := Int( nTime2 - nTime1 ) IF M->SetTimeScr < nSeconds SHUFFLE() //------------- SCREEN SAVER --------// nSeconds := 0 nTime1 := Seconds() ENDIF ENDIF SetColor( cCol7 ) ELSE nTime1 := Seconds() ENDIF DO CASE CASE LK == K_ALT_A ... CASE LK == K_TAB .OR. LK == K_RIGHT .OR. LK == K_DOWN ... и т.д.
|
 |

|
|
|
| |
Пост N: 180
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 09:49. Заголовок: Там где ожидание чер..
Там где ожидание через INKEY() там все понятно... а в Achoice() Dbedit() этого нет... эти функции бесконечно ждут пользователя... а он забыл итд....
|
 |

|
|
|
| постоянный участник
|
Пост N: 8045
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.09.25 10:44. Заголовок: Oskar_AAA пишет: а ..
Oskar_AAA пишет: | цитата: | | а в Achoice() Dbedit() этого нет |
| Глянул свои исходники, я их переделал на TBrowseDB()
|
 |

|
|
|
| |
Пост N: 369
Зарегистрирован: 05.10.06
|
|
Отправлено: 18.09.25 11:15. Заголовок: Oskar_AAA пишет: Ес..
Oskar_AAA пишет: | цитата: | Если Пользователь не работает с программой 5,10,30 итд минут. Это в диалоговых режимах (выбор отчета в меню и/или просмотр отчета итд). Если выбран отчет - то формируется отчет и не важно сколько времени уйдет на его формирование. То есть нужно "засунуть" INKEY(60) в Пользовательскую функцию Achice() b Dbedit(). |
| У меня запущен поток, где есть общая переменная с основным потоком, которая задает таймер простоя, в потоке она минусуется каждый период времени, когда дойдет до нуля программа завершает работу, нажатия клавиш или мышки, или при построении длительных отчетов устанавливает таймер на начало отсчета. Можно так же использовать состояние IDLE для этого В Achoice можно вроде и в функции обрабатывать это
|
 |

|
|
|
| |
Пост N: 181
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 11:49. Заголовок: В Achoice можно врод..
В Achoice можно вроде и в функции обрабатывать это - просмотрел, нет такого параметра, если только в функцию пользователя INKEY() не проставить...
|
 |

|
|
|
| |
Пост N: 370
Зарегистрирован: 05.10.06
|
|
Отправлено: 18.09.25 17:01. Заголовок: Oskar_AAA пишет: В ..
Oskar_AAA пишет: | цитата: | | В Achoice можно вроде и в функции обрабатывать это - просмотрел, нет такого параметра, если только в функцию пользователя INKEY() не проставить... |
| на сколько помню, функция постоянно опрашивается, следовательно можно в ней организовать таймер простоя, используя либо static переменную в функции либо внешнюю private/public. при первом вызове инициализируете ее в seconds() и проверяете когда временной промежуток составит необходимую вам разницу, затем организуете процедуру выхода глянул и в DbEdit() есть в функции состояние - DE_IDLE 0 Idle, тоже наверное работает по тому же принципу...
|
 |

|
|
|
| |
Пост N: 8132
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.09.25 19:06. Заголовок: Oskar_AAA hb_gtInfo..
Oskar_AAA hb_gtInfo(HB_GTI_INKEYFILTER, {|nk| aadd(aDownKeys,nk)}) В функции что поселишь в FT_OnTick можно отслеживать и время и нажатия из массива aDownKeys Это как вариант , дальше сам 
|
 |

|
|
|
|
|
| |
Пост N: 182
Зарегистрирован: 09.09.11
|
|
Отправлено: 18.09.25 19:45. Заголовок: Коллеги, спасибо за ..
Коллеги, спасибо за советы. Программа на xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212). Не указал в начале темы... Будем ковырять дальше....
|
 |

|
|