Простая считалка

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

Простая считалка

Сообщение eldar22 » 25.09.2009 (Пт) 1:36

Здравствуйте!
Вот проблема не могу не как организовать это
хотелось бы сделать программа которая каждую милисекунду будет прибавлять 1 к числу 1
то есть получиться считалка 12345678 и тд
Как с таймером работать я знаю
Код: Выделить всё
Private Sub Command1_Click()
s = 1

    Timer1.Interval = 1
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
результат выводить например в text1.text
s = s - 1
    If s = 0 Then Timer1.Enabled = True

End Sub

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

Re: Простая считалка

Сообщение Viper » 25.09.2009 (Пт) 6:02

Так проблема то в чем? Увеличивай на единицу переменную-счетчик и добавляй это число к строке.
Есть два вопроса:
1. 123456789 - а дальше что? 101112?
2. А до какого предела добавлять единичку предполагается?
Весь мир матрица, а мы в нем потоки байтов!

Al Prad
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 16.08.2007 (Чт) 12:46
Откуда: Одесса

Re: Простая считалка

Сообщение Al Prad » 25.09.2009 (Пт) 8:55

eldar22 писал(а):Здравствуйте!
Вот проблема не могу не как организовать это
хотелось бы сделать программа которая каждую милисекунду будет прибавлять 1 к числу 1
то есть получиться считалка 12345678 и тд
Как с таймером работать я знаю
Код: Выделить всё
Private Sub Command1_Click()
s = 1

    Timer1.Interval = 1
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
результат выводить например в text1.text
s = s - 1
    If s = 0 Then Timer1.Enabled = True

End Sub



Если не ошибаюсь, ставить меньше 18 миллисекунд бесполезно - ограничено скоростью windows...

eldar22
Обычный пользователь
Обычный пользователь
 
Сообщения: 91
Зарегистрирован: 09.09.2008 (Вт) 18:11

Re: Простая считалка

Сообщение eldar22 » 25.09.2009 (Пт) 13:31

Мне если честно без разницы сколько милисекунд мне главное сделать так, чтобы к число 1 или 0 прибавлялось число единица то есть чтобы получилось считалка 1,2,3,4,5,6,7,8 и тд.

dub
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 13.01.2003 (Пн) 9:18
Откуда: Russia

Re: Простая считалка

Сообщение dub » 25.09.2009 (Пт) 15:46

что то немогу понять а в чем проблема....
Код: Выделить всё
dim s as interger
Private Sub Command1_Click()
s = 1
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
'результат выводить например в text1.text
s = s + 1
textbox1.text = textbox.text + s
'или textbox.text = s
End Sub

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

Re: Простая считалка

Сообщение Viper » 25.09.2009 (Пт) 20:04

eldar22 писал(а):Мне если честно без разницы сколько милисекунд мне главное сделать так, чтобы к число 1 или 0 прибавлялось число единица то есть чтобы получилось считалка 1,2,3,4,5,6,7,8 и тд.
Тем более проще, просто инкрементируй на каждом шаге таймера. Правда таймер с интервалом 1 мс особого смысла иметь не будет, как уже было сказано.
Весь мир матрица, а мы в нем потоки байтов!

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Простая считалка

Сообщение awl100Alex » 02.10.2009 (Пт) 15:59

Al Prad писал(а):Если не ошибаюсь, ставить меньше 18 миллисекунд бесполезно - ограничено скоростью windows...


В старых, добрых традициях этого форума, вот на эту реплику можно было бы, как это уже давно принято здесь, написать что-то типа: ЧУШЬ, БРЕД, АХИНЕЯ и т.п. Странно, что до сих пор этого никто не сделал! Но, видимо, подобные обвинения имеют какую-то избирательную направленность. :?
Вобщем, позволю себе нарушить традиции, не стану опускаться к столь низкому проявлению «уважения» к автору, а просто напишу, что это не совсем правильно и он таки ошибается.

По сути, так...
Не скоростью windows... а это аппаратное ограничение. И не 18 миллисекунд... - часовой таймер PC возвращает время с приращением в 1/18 (18,21 раза в секунду) – в 1 секунде 1000 миллисекунд, поэтому 1000/18,21=54,9 ~ 55 миллисекунд.

Сделать считалку с точность в 1 мсек все-таки можно, другое дело нет такого (а может я просто не знаю такого) таймера, который бы в Windows смог отобразить прогресс такого счета в том же TextBox. Ведь считать – это одно, а вот еще и отображать счет с таким же интервалом – это уже сложнее.
Таймер VB похоже работает на базе API – SetTimer, поэтому и он, и сам SetTimer, и отдельный просто счетчик GetTickCount, и др. – все используют аппаратный таймер PC с ограничением в 1/18. Именно в этом и будет проблема.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Простая считалка

Сообщение Mikle » 04.10.2009 (Вс) 9:35

awl100Alex писал(а):Не скоростью windows... а это аппаратное ограничение

Насколько понимаю, тоже не совсем так. В Win9X было 55 мс, в NT системах уже не 55, а 10 мс.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Простая считалка

Сообщение alibek » 04.10.2009 (Вс) 11:38

Mikle писал(а):Насколько понимаю, тоже не совсем так. В Win9X было 55 мс, в NT системах уже не 55, а 10 мс.

Насколько я знаю, те же 55мс.
Просто там есть еще и мультимедийный таймер.
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Простая считалка

Сообщение Mikle » 04.10.2009 (Вс) 13:36

alibek
Этот код показывает, что ф-ция Timer имеет период не более 0.0156 сек.
Код: Выделить всё
Dim Running As Boolean, dt As Single

Private Sub Form_Click()
  dt = 0
End Sub

Private Sub Form_Load()
  Dim t1 As Single, t2 As Single
  Show
  t1 = Timer
  Running = True
  Do While Running
    DoEvents
    t2 = Timer
    If dt < t2 - t1 Then dt = t2 - t1: Caption = dt
    t1 = t2
  Loop
  Unload Me
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If Running Then
    Cancel = 1
    Running = False
  End If
End Sub

Такой код:
Код: Выделить всё
Option Explicit
' Период первого таймера задан 1 мс, второго - 1000 мс.
Dim FPS As Long

Private Sub Timer1_Timer()
  FPS = FPS + 1
End Sub

Private Sub Timer2_Timer()
  Caption = FPS
  FPS = 0
End Sub

показывает, что контрол Timer срабатывает с частотой не более 64 гц(те же 15.6 мс). GetTickCounter, думаю, даст тот же результат.
Они используют мультимедийный таймер? А как они тогда работают в Win9X?

Gogic
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 24.08.2008 (Вс) 13:19

Re: Простая считалка

Сообщение Gogic » 10.10.2009 (Сб) 15:07

В Win 9x те же 15,6, функция GetTickCount в NT не менялась, железо от винды не поменялось тем более.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Re: Простая считалка

Сообщение zHackLeX » 17.10.2009 (Сб) 17:23

...и уже совсем непонятно, зачем обновлять TextBox с частотой,
превышающей частоту обновления монитора (60..100 Гц)...

..хотя, конечно, оффтоп это всё, автору-то нужно было строчку получить :D
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 98

    TopList