Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 10:28   #1
JustKurt
ANT team
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию Прикрутить к функции таймер

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

Код:
function scandev :boolean;
begin
result:=false;
application.ProcessMessages ;
  BB5SOC(DevString);
Repeat
    Application.ProcessMessages   ;
    sleep(50);
  until (BB5SOC(DevString) = True);
  sleep(50);
  Result:=True;
  _msg('Connection OK!');
 end;
С процедурой все понятно, но мне надо эту функцию использовать сотни раз в приложении....

Мой код тупо ждет пока результат будет положительный, то есть устройства подццепят к компу...
JustKurt вне форума Ответить с цитированием
Старый 03.08.2009, 11:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пардон не понял а зачем?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2009, 11:29   #3
JustKurt
ANT team
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию

Stilet, это нужно для того, чтобы отменять операцию.
В общем если объяснить просто картина такая -

Функция - это повторяющееся действие поиска и открытия порта устройста - телефона.

Пока телефон не подключен - она работает.
Получается такая картина - у юзера проблемы с коннектом - телефон, например, занят программой другой, и нажимая кнопку, которпая имеет отношение к коннекту с телефоном он получает строчки -

Цитата:
Action: Read product code
Show All Codes enabled...
Init usb communication...
Эта история + еле заметное подвисание ( это не имеет подвисание значения) может продолжаться час, два, пока телефон не найдется программой...

Добавить таймер к функции и сделать таймаут, скажем, в 20 секунд - и в результате отсутствия коннекта операция отменяется, и юзер получает сообщение - проверьте драйвера, соединение и прочее...

Обработчик события по кнопке -
Код:
  if scandev = true then
     begin
       StatusBar.Panels.Items[3].Text :='Phone Found! Do some operations...';
....................
end
else begin
    _msg('');
    _msg('Error! Check connection, driver, e.t.c');
    StatusBar.Panels.Items[3].Text :='ERR: code:0';
    USBClosePort;
end;
JustKurt вне форума Ответить с цитированием
Старый 03.08.2009, 11:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не ну смотри: У тебя в цикле Application.ProcessMessages ;
Значит ты можешь прикрутить кнопку, по клику которой в False будет выставляться некая переменная. А в самом цикле проверяй
Код:
until BB5SOC(DevString) or (not  переменная)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2009, 11:44   #5
JustKurt
ANT team
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию

Кнопку- может можно сделать общую кнопку, по клику которой, текущая операция будет отменяться?) (ну хотябы на две операции) )
А так - Хотел бы таймер вкрутить =(
JustKurt вне форума Ответить с цитированием
Старый 03.08.2009, 11:46   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Хотел бы таймер вкрутить
Ну а таймер то для чего? Перед repeat устанавливай result:=false
А в repeat проверяй если кнопка не была нажата и BB5SOC(DevString)=Труе то Result:=True;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2009, 12:50   #7
JustKurt
ANT team
Пользователь
 
Регистрация: 25.06.2009
Сообщений: 39
По умолчанию

Я хотел бы, чтобы в функции как только она начинает выполняться - запускался таймер, и пока таймер не кончился - повторялась попытка коннекта, если время кончилось - то функция вбы выдавала на выход результат False.
Вот что мне нужно)
Кнопки лишние крутить - их там итак море получается =/
JustKurt вне форума Ответить с цитированием
Старый 03.08.2009, 13:06   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Тогда так: перед циклом запоминаешь текущее время, а в цикле проверяешь если текущее время больше запомненного на $%^дцать секунд то выйти с False
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2009, 13:55   #9
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Кидаете на форму таймер. Свойство Timer.enabled:=false;
Теперь в программе по нажатию на что-нибудь, запускайте таймер.
Timer.Enabled:=true;
А в самом обработчике таймера пишите:
Timer.Enabled:=not scandev;
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таймер для функции TaTT DoGG PHP 4 02.07.2009 17:02
прикрутить к плагину ТХТ просмоторщик... Mirvays Фриланс 3 29.06.2009 11:17
Как прикрутить к своему приложению "7z.dll"? Валигози Общие вопросы Delphi 18 10.06.2009 12:01
Как прикрутить BeanBox к Eclipse Galinka08 Общие вопросы по Java, Java SE, Kotlin 0 12.03.2008 12:40
Как прикрутить GiveIO ? caveman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.12.2007 08:43