Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Timer1 и видеопоток. Добавлено: 19.10.08 17:43  

Автор вопроса:  Боцман | Web-сайт: Rus-Skipper.narod.ru | ICQ: 295725312 
Вообщем нужно показывать Picture как кадры фильма, с частотой кадров выставленной в TextBoxse.
И вот тут с Timer1.Interval = 1000 / Text1 происходит несовпадение дествительного и желаемого. Вот даже пример сделал.
Dim kadr As Long, T1 As Long, T2 As Long
Private Sub Command1_Click()
kadr = 0
T1 = Timer
Timer1.Interval = 1000 / Text1
Timer1.Enabled = True
Me.Caption = "Создаем поток"
End Sub

Private Sub Command2_Click()
Timer1.Enabled = False
T2 = Timer
Me.Caption = "Длительность фильма - " & T2 - T1 & "nae"
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Command1.Caption = "Пуск"
Command2.Caption = "Стоп"
Text1 = "15"
End Sub

Private Sub Timer1_Timer()
If kadr > 150 Then Command2_Click
kadr = kadr + 1
End Sub

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

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 19.10.08 18:55
Ты вопрос-то сформулируй что-ли...

Ответить

Номер ответа: 2
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #2
Добавлено: 19.10.08 19:08
Подробнее
Вообщем нужно показывать Picture как кадры фильма, с частотой смены кадров выставленной в TextBoxse. Просто выставил больше получиш старое кино, меньше тогда замедленный просмотр. Обшее количество кадров неизменно и известно.
И вот тут с Timer1.Interval = 1000 / Text1 происходит несовпадение дествительного и желаемого.

Что получается у меня при частоте смены кадров =15,
 150 кадров показывают 12 секунд, при 30 7 секунд при 50
5 секунд, почему? В примере я даже не открываю фот о просто цикл, и вот он с ошибкой, ПОЧЕМУ.

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 19.10.08 19:17
Хз. Таймер - штука неточная, видимо.

Ответить

Номер ответа: 4
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #4
Добавлено: 19.10.08 19:30
Хз. Таймер - штука неточная, видимо.

И тогда что? 1000 выставленная в таймере не ровна 1 секунде? Блин и почему это только мне так везет?

Ответить

Номер ответа: 5
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #5
Добавлено: 19.10.08 22:24
во-первых, таймер имеет дискретность 55 мс, поэтому даже если указать 1 мс, тикать он будет раз в 55 мс. Более того, так как он дискретен 55, то если установить значение 60мс, то он сработает лишь спустя 110мс. Так что тебе еще повезло, что есть разница между "при 30 7 секунд при 50 5 секунд". Есть таймер с дикретностью 1 мс, но его нада юзать через АПИ.

Ответить

Номер ответа: 6
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #6
Добавлено: 19.10.08 22:37
во-первых, таймер имеет дискретность 55 мс

Блин сто раз в примерах видел устоновки менее 55, да и в описании свойств таймера Timer1.Interval.min=55 не встречал.
Век живи, век учись и неучем помрёш. Насчет АПИ поищу,спс.

Ответить

Номер ответа: 7
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 19.10.08 23:32
у меня то же самое: 11812, 7125, 4750
насколько я понимаю при низком интервале он совсем неточный, этот таймер...
хотя у меня даже при интервале 1000 он отсчитывает 10 секунд за ~10700мс х_х

Ответить

Номер ответа: 8
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #8
Добавлено: 20.10.08 09:38
АПИ. пока недали результата. Опять то же самое, вот пример.
  1. ' 1 TextBox и 1 кнопка
  2. 'в форме
  3. Private Sub Form_Load()
  4.     hQueue = CreateTimerQueue()
  5.     Command1.Caption = "Start"
  6.     Command2.Caption = "Stop"
  7. Text1 = "15"
  8. End Sub
  9. Private Sub Form_Unload(Cancel As Integer)
  10.     DeleteTimerQueue hQueue
  11. End Sub
  12. Private Sub Command1_Click()
  13. Dim Interval As Byte
  14. kadr = 0
  15. T1 = Timer
  16. Interval = 1000 / Text1
  17.  
  18. Me.Caption = "Создаем поток"
  19.     If Flag = 0 Then
  20.         CreateTimerQueueTimer Flag, hQueue, AddressOf TimerCallBack, ByVal 0&, 0, Interval, 0
  21.     End If
  22. End Sub
  23. '*******************************************************
  24. 'в модуле
  25.  Declare Function CreateTimerQueue Lib "kernel32.dll" () As Long
  26.  Declare Function CreateTimerQueueTimer Lib "kernel32.dll" (ByRef phNewTimer As Long, ByVal TimerQueue As Long, ByVal Callback As Long, ByVal Parameter As Long, ByVal DueTime As Long, ByVal Period As Long, ByVal Flags As Long) As Long
  27.  Declare Function DeleteTimerQueue Lib "kernel32.dll" (ByVal TimerQueue As Long) As Long
  28.  Declare Function DeleteTimerQueueTimer Lib "kernel32.dll" (ByVal TimerQueue As Long, ByVal Timer As Long, ByVal CompletionEvent As Long) As Long
  29. Global kadr As Long, T1 As Long, T2 As Long, hQueue As Long, Flag As Long
  30. Public Sub TimerCallBack(ByVal lpParameter As Long, ByVal TimerOrWaitFired As Long)
  31.    If kadr > 150 Then
  32.        T2 = Timer
  33.            If Flag <> 0 Then
  34.         DeleteTimerQueueTimer hQueue, Flag, ByVal 0&
  35.         Flag = 0
  36.     End If
  37. Form1.Caption = "Длительность фильма - " & T2 - T1 & "сек."
  38.    End If
  39. kadr = kadr + 1
  40. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #9
Добавлено: 20.10.08 10:42
Вот еще пример сделал, все равно тоже самое. Так что? нормального кина не будет, кинщик захворал?
  1. Private Sub Form_Load()
  2.  Text1 = "15"
  3.  Command1.Caption = "Пуск"
  4. End Sub
  5.  
  6. Private Sub Command1_Click()
  7. Dim Interval As Byte
  8. kadr = 0
  9. T1 = Timer
  10. Interval = 1000 \ Text1
  11. Me.Caption = "Создаем поток"
  12. '***********
  13.     lngTimerID = SetTimer(0, 0, Interval, AddressOf TimerProc)
  14. End Sub
  15. '***************в модуле**************
  16. Declare Function SetTimer Lib "user32" _
  17.   (ByVal hwnd As Long, _
  18.   ByVal nIDEvent As Long, _
  19.   ByVal uElapse As Long, _
  20.   ByVal lpTimerFunc As Long) As Long
  21.  
  22. Declare Function KillTimer Lib "user32" _
  23.             (ByVal hwnd As Long, _
  24.             ByVal nIDEvent As Long) As Long
  25. Global kadr As Long, T1 As Long, T2 As Long, hQueue As Long, Flag As Long, lngTimerID As Long
  26.  
  27. Sub TimerProc(ByVal hwnd As Long, _
  28.       ByVal uMsg As Long, _
  29.       ByVal idEvent As Long, _
  30.       ByVal dwTime As Long)
  31.  
  32.  kadr = kadr + 1
  33.     If kadr > 150 Then
  34.          T2 = Timer
  35.          lngTimerID = KillTimer(0, lngTimerID)
  36. Form1.Caption = "Длительность фильма - " & T2 - T1 & "сек."
  37.    End If
  38. End Sub

Ответить

Номер ответа: 10
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #10
Добавлено: 20.10.08 14:36
И всетаки с помошью
 
  1. Private Declare Function timeGetTime Lib "winmm.dll" () As Long

кино есть!!!
Всем удачи.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам