Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Таймер на час / 25 сообщений из 29, страница 1 из 2
15.11.2010, 17:00
    #36957729
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Подскажите пожалуйста, как сделать чтобы программа находилась в режиме ожидания заданное время, например 1 час? Sleep просто "подвесит" программу а таймер не работает с большими значениями секунд.. Есть выход их этой ситуации?
...
Рейтинг: 0 / 0
15.11.2010, 17:02
    #36957733
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
просто заведи переменную типа date, которую заполни стратовым временем, потом в цикле проверяй наступило ли нужное тебе время от стартового
...
Рейтинг: 0 / 0
15.11.2010, 17:20
    #36957800
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEBПодскажите пожалуйста, как сделать чтобы программа находилась в режиме ожидания заданное время, например 1 час? Sleep просто "подвесит" программу а таймер не работает с большими значениями секунд.. Есть выход их этой ситуации?
ну а в чем проблема? Заводи таймер на максимум и перезаводи его, пока требуется.
...
Рейтинг: 0 / 0
15.11.2010, 17:24
    #36957813
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Если делать допустим так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  

Private Function vBSleep(TmpPause As Long)
  Dim Tim As Long
  Tim = Timer
  Do
  Loop While Tim + TmpPause >= Timer
End Function


то при вызове Call vBSleep(38000) программа просто будет висеть и не отвечать на запросы...
...
Рейтинг: 0 / 0
15.11.2010, 17:25
    #36957814
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
doevents в цикле не забываем
...
Рейтинг: 0 / 0
15.11.2010, 17:28
    #36957825
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Konst_Onedoevents в цикле не забываем
а я вот не люблю такие вещи. Зачем грузить проц пустым циклом целый час. Лучше уж таймер перезаводить.
...
Рейтинг: 0 / 0
15.11.2010, 17:29
    #36957832
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Shocker.ProKonst_Onedoevents в цикле не забываем
а я вот не люблю такие вещи. Зачем грузить проц пустым циклом целый час. Лучше уж таймер перезаводить.

я тоже не люблю
...
Рейтинг: 0 / 0
15.11.2010, 17:33
    #36957849
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Shocker.ProKonst_Onedoevents в цикле не забываем
а я вот не люблю такие вещи. Зачем грузить проц пустым циклом целый час. Лучше уж таймер перезаводить.
А как перезаводить правильно, нет примерчика случайно? :)
...
Рейтинг: 0 / 0
15.11.2010, 17:34
    #36957853
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEBShocker.Proпропущено...

а я вот не люблю такие вещи. Зачем грузить проц пустым циклом целый час. Лучше уж таймер перезаводить.
А как перезаводить правильно, нет примерчика случайно? :)
Код: plaintext
i=i+ 1 
как только i достигнет нужного значения - значит нужное вам событие наступило
...
Рейтинг: 0 / 0
15.11.2010, 21:09
    #36958301
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Все получилось ) Вопрос есть такой, как прибавить к Label4
Label4.Caption = Format(Time, "HH:mm:ss")
еще час двадцать минут например? Спасибо!
...
Рейтинг: 0 / 0
15.11.2010, 21:35
    #36958329
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
DateAdd("n", 1 * 60 + 20, Now)
...
Рейтинг: 0 / 0
16.11.2010, 13:07
    #36959230
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
dtNow = Now 
Label5.Caption = DateAdd("n",  1  *  1 , Now) 'плюсуется 1 мин к текущему времени
Label9.Caption = Format(Label5.Caption, "dd.mm.yyyy") 
Label5.Caption = Format(Label5.Caption, "hh:mm:ss") 
Label3.Caption = Format(dtNow, "hh:mm:ss")  'текущая дата
Label8.Caption = Format(dtNow, "dd.mm.yyyy")  'текущее время
dtComp = CDate(Label9.Caption)
dtCompp = CDate(Label8.Caption)
While dtCompp <= dtComp And Label3.Caption < Label5.Caption
DoEvents
Wend
MsgBox "Выполнено"

Вопрос. Как правильно реализовать сравнение даты и времени одновременно?
Не могу додумать как сделать условие ( 16.10.2010 12:10:00 и 17.10.2010 11:10:00 ) чтобы правильно сравнивались. В моем примере постоянно идет сравнение с текущей датой и временем.
...
Рейтинг: 0 / 0
16.11.2010, 13:07
    #36959233
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
datediff()
...
Рейтинг: 0 / 0
16.11.2010, 13:15
    #36959251
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEB,

Код: plaintext
dtComp = CDate(Label9.Caption)

вообще-то это плохая идея.
Ибо на машине с другими региональными установками можно напороться на путаницу месяца и дня (получить 1-е мая вместо 5-го января)
...
Рейтинг: 0 / 0
16.11.2010, 13:20
    #36959271
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEB
Вопрос. Как правильно реализовать сравнение даты и времени одновременно?

Костя неверно понял твой вопрос.
Дату и время можно просто тупо сложить:
Код: plaintext
dtComp = CDate(Label9.Caption)+CDate(Label8.Caption)
но это не отменяет того, что я написал выше.
со временем будет все нормально, а с датой может возникнуть путаница.
...
Рейтинг: 0 / 0
16.11.2010, 13:23
    #36959278
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
datediff позволяет сравнивать как в минутах, так и в часах, днях и тд
я не понимаю зачем вы даты в label-ы засовываете , а затем пытаетесь их сравнивать. у вас же есть переменная , где уже храниться время старта, ну так и сравнивайте с относитедльным интервалом
...
Рейтинг: 0 / 0
16.11.2010, 13:34
    #36959300
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Konst_Onedatediff позволяет сравнивать как в минутах, так и в часах, днях и тд
я не понимаю зачем вы даты в label-ы засовываете , а затем пытаетесь их сравнивать. у вас же есть переменная , где уже храниться время старта, ну так и сравнивайте с относитедльным интервалом
Лэйблы нужны для наглядного отображения их же можно использовать и в коде )
Код: plaintext
1.
2.
Dim retval
retval = DateDiff("d", Label3.Caption, Label9.Caption)
MsgBox retval
40498 вернул
Это будет разница в днях,
не пойму как мне сразу сравнить даты и время (
Что то никак не разберусь.
...
Рейтинг: 0 / 0
16.11.2010, 13:53
    #36959361
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEBне пойму как мне сразу сравнить даты и время (
Что то никак не разберусь.

Что имеется ввиду под "сравнить"
больше-меньше? Или какой результат надо получить?
...
Рейтинг: 0 / 0
16.11.2010, 13:56
    #36959374
MasterWEB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Shocker.Pro
Что имеется ввиду под "сравнить"
больше-меньше? Или какой результат надо получить?

Есть 16.10.2010 13:00:00 (сегодня) и есть 17.10.2010 12:00:00 (завтра) Цикл должен проверять не наступила ли эта дата и время. Как только наступила - сообщение.
...
Рейтинг: 0 / 0
16.11.2010, 13:57
    #36959380
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEBShocker.Pro
Что имеется ввиду под "сравнить"
больше-меньше? Или какой результат надо получить?

Есть 16.10.2010 13:00:00 (сегодня) и есть 17.10.2010 12:00:00 (завтра) Цикл должен проверять не наступила ли эта дата и время. Как только наступила - сообщение.
ну так это простое большеменьше, не нужен никакой datediff, о чем я и говорю, Костя просто не понял вопрос.

А как склеить дату и время - я написал выше
...
Рейтинг: 0 / 0
16.11.2010, 14:00
    #36959386
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEBЛэйблы нужны для наглядного отображения их же можно использовать и в коде )
тогда форматируйте дату в виде "yyyy-mm-dd" тогда не будет проблем с локализацией
...
Рейтинг: 0 / 0
16.11.2010, 14:02
    #36959393
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
я к тому клоню, что сравнивать надо переменные типа date. а отображать можно как угодно
...
Рейтинг: 0 / 0
16.11.2010, 14:04
    #36959402
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Konst_Oneя к тому клоню, что сравнивать надо переменные типа date. а отображать можно как угодно
ну да
преобразование в дату я у автора видел, а вот этот бред
Код: plaintext
And Label3.Caption < Label5.Caption
не заметил
...
Рейтинг: 0 / 0
16.11.2010, 14:09
    #36959418
MAYAKOV_SV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
MasterWEB, такое потоками делается:

1. В модуле:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private hThread As Long, hThreadID As Long
Public Sub AsyncThread()
    'к примеру, 5 секунд работает
    Sleep  5000 
    hThread =  0 
    CloseHandle hThread
    ' Тут мы что-то делаем
End Sub

Public Sub InitThread()
 hThread =  0 
End Sub

Public Sub CloseThread()
 If hThread <>  0  Then
  TerminateThread hThread,  0 
  CloseHandle hThread
 End If
End Sub

Public Sub CreateNewThread()
 hThread = CreateThread(ByVal  0 &, ByVal  0 &, AddressOf AsyncThread, ByVal  0 &, ByVal  0 &, hThreadID)
End Sub

2. На форме:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Command1_Click()
 CreateNewThread
End Sub

Private Sub Form_Load()
 InitThread
End Sub

Private Sub Form_Unload(Cancel As Integer)
  CloseThread
End Sub
...
Рейтинг: 0 / 0
16.11.2010, 15:15
    #36959643
Skiffspb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таймер на час
Эээ, может я чего не понимаю, но таймер на любое время делался всегда так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Timer1_Timer()
Static bMin As Byte

If bMin =  60  Then
    i =  0 
    MySub
Else
    bMin = bMin +  1 
End If
End Sub

Private Sub MySub()

End Sub

Без извратов с вычислением разницы времени и проч. Нет?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Таймер на час / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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