Как циклу отвести заданное время?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

Как циклу отвести заданное время?

Сообщение timsoft » 31.01.2007 (Ср) 18:55

Всем привет!

Задача такая:
1. Посылаем в ком-порт команду.
2. Ждем точно заданное время.
3. Берем из ком-порта ответ.

Код: Выделить всё
function responce(cmd as String, waitSec as single) as String

    sendToCom cmd

    'тут нужен код для точного ожидания waitSec секунд
    'timer не катит, потому что в это время может произойти
    'смена суток и timer сбросится на 0
    'кроме того, в момент ожидания система не должна тупить
    'и тормозить всех и вся :)

    responce = getFromCom

end function


посоветуйте элегантное решение.
tim@ Изображение

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 31.01.2007 (Ср) 21:33

Ну попробуй функцию Sleep.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Re: Как циклу отвести заданное время?

Сообщение Wolfie » 31.01.2007 (Ср) 23:07

timsoft писал(а): 'timer не катит, потому что в это время может произойти
'смена суток и timer сбросится на 0

А почему бы не сделать объект Timer? и врубать его, а анализировать результат тогда уже в самом Timer1_Timer... Хотя Sleep конечно больше подойдет... но он прожорливый :)
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.01.2007 (Ср) 23:21

Потому что таймер плох при малых Interval-ах. Например при интервале 7.... Будет наверное где то 50.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 31.01.2007 (Ср) 23:31

правильный ответ: никак. Точное время в многопоточной операционной системе подождать нельзя.
Ну и второе, а что, sleep точнее таймера?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 01.02.2007 (Чт) 1:34

А чем GetTickCount не устраивает?
Человек рождён для того, чтобы достичь жизни...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.02.2007 (Чт) 1:45

VB-constructor
Конструкция с циклом и GetTickCount будет грузить процессор.

settimer() чем не устраивает?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 01.02.2007 (Чт) 2:00

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

то, что она грузит комп, сомневаюсь... :?

settimer() чем не устраивает?
тоже можно, правда на пару строк кода больше будет... но это дело преодолимое :)
Человек рождён для того, чтобы достичь жизни...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.02.2007 (Чт) 4:04

А зачем вообще нужна задержка? Просто читать из порта, и всё. Пока туда ничего не пришло, задержка будет сама собой.
Изображение

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 01.02.2007 (Чт) 14:31

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

timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

Сообщение timsoft » 01.02.2007 (Чт) 18:34

tyomitch писал(а):А зачем вообще нужна задержка? Просто читать из порта, и всё. Пока туда ничего не пришло, задержка будет сама собой.


дело в том, что на ком-порту висит промышленный счетчик. Я его стартую, жду определенное время и затем считываю его показания. Если прочитать значения раньше или позже, то они будут неточными. Вернее, они будут точными, но время, за которое они насчитались, будет неизвестным :)
tim@ Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.02.2007 (Пт) 7:57

А простым таймером никак? Поставил нужный интервал и считывай показания в событиях.

З.Ы. Объяснение насчет возможной смены суток в применению к таймеру выглядит странно
Весь мир матрица, а мы в нем потоки байтов!

timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

Сообщение timsoft » 02.02.2007 (Пт) 11:36

!Viper! писал(а):А простым таймером никак? Поставил нужный интервал и считывай показания в событиях.

З.Ы. Объяснение насчет возможной смены суток в применению к таймеру выглядит странно


Простым контролом Таймер конечно можно, да только им неудобно отсчитывать интервалы более 65 секунд...
tim@ Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.02.2007 (Пт) 11:46

Зацени функцию SetTimer. Диапазона Long думаю хватит
Весь мир матрица, а мы в нем потоки байтов!

timsoft
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 181
Зарегистрирован: 18.10.2003 (Сб) 10:50
Откуда: Odessa, Ukraine

Сообщение timsoft » 02.02.2007 (Пт) 11:58

Спасибо всем
tim@ Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.02.2007 (Вт) 23:33

Сам-то понял, что сказал?

Какой объект ты ждать собрался?
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 97

    TopList