Прошу немного помоч

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.02.2005 (Вс) 18:12

sashar2 писал(а):Dim T&, I&
Вот эта строка не понятна, что означает & после переменной?

В точности то же, что As Long

While / Wend - в точности то же, что Do While / Loop. Про циклы Do знаешь?
Изображение

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 27.02.2005 (Вс) 18:15

Убрал Апач, все службы BT, фарик, антивирь:
5509270!
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 27.02.2005 (Вс) 18:33

tyomitch
Теперь вопросов нет, кроме GetTickCount, счетчик что ли это? И почему использует библеотеку.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 27.02.2005 (Вс) 18:41

Да, счетчик. Возвращает количество миллисекунд, прошедших с момента запуска Windows. Использует библиотеку Win32 API, потому что стандартная VB-функция Timer в этом случае не подходит. Конкретнее - она возвращает количество секунд, прошедших с 00:00 текущего дня. Представь, каково будет возвращенное значение через секунду после 23:59? :)
Моду создают модоки, а распространяют модозвоны.

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 27.02.2005 (Вс) 18:44

hCORe
Теперь кажеться ясно, кстати от куда вы все это берете? Есть какая-нидудь нормальная книга по vb, которя будет описывать все это. У меня есть две книги для новичков, но там я все изучил. Теперь думаю надо переходить к следующему этапу...

P.S>
Больше нет предложений с еще более "быстрым кодом" ? =)

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 27.02.2005 (Вс) 18:48

Опыт приходит со временем... Я программирую на VB уже пять лет :)

Распространенные источники знания - MSDN (библиотека разработчика от Microsoft, скорее технический справочник по различным функциям Win32 API), ресурс AllAPI по использованию этих самых функций на VB, различные Интернет-ресурсы (по алгоритмам, например), и, конечно же, этот форум :D
Моду создают модоки, а распространяют модозвоны.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.02.2005 (Вс) 18:50

Больше нет предложений с еще более "быстрым кодом" ? =)


Код: Выделить всё
mov eax, 0
start: inc eax
jmp start
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 27.02.2005 (Вс) 18:56

GSerg писал(а):
Больше нет предложений с еще более "быстрым кодом" ? =)


Код: Выделить всё
mov eax, 0

Считается, что "xor eax, eax" быстрее, потому что короче (доступ к памяти - крайне медленная операция).

Я только не пойму, а зачем оптимизировать пустой цикл? :roll: :lol:
Изображение

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 27.02.2005 (Вс) 19:07

GSerg
Мало что понял в коде, можно это на работающем примере?

hCORe
Тогда ясно... я намного меньше...

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

Сообщение tyomitch » 27.02.2005 (Вс) 19:24

sashar2, это у GSerg-а шутки такие ;-)

Не обращай внимания; будешь писать на VB пять лет - поймёшь их юмор :-)
Изображение

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 27.02.2005 (Вс) 19:58

tyomitch
Ясно... =) А если серьезно, то никак быстрее не выйдет? И как всетаки сделать, чтобы тест был более "чистым"?

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

Сообщение tyomitch » 27.02.2005 (Вс) 20:19

sashar2, я совершенно серьёзно не понимаю, что ты пытаешься сделать.
Написать "прогу для тестирования скорости компа"?
Написать "самый оптимальный пустой цикл"?
Или что?
Изображение

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 27.02.2005 (Вс) 20:29

Да я сам не знаю... Просто мне стало интересно узнать скорость работы этих цыклов. На сколько зависит это от винды/проца и во сколько раз это все быстрее таймера. Ну вообщем начальной идеии я уже не помню. Но знаю точно что прогу для тестирования скорости комп не удасца сделать т.к. тест слишком зависим.. прога врублена лишняя уже на миллион меньше....

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 28.02.2005 (Пн) 16:02

Я может че-то не понимаю, но какой "независимости" ты хочешь добиться? Как тест, напрямую зависящий от проца, может не зависеть от загрузки этого самого проца? Та же Sandra просит не дергать мышой во время теста. :roll:

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 28.02.2005 (Пн) 17:30

Кстати можно еще юзать timeGetTime и Timer для измерения времени, а не только GetTickCount.

Вот мой пример на эту тему:
Код: Выделить всё
Option Explicit

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function GetTickCount& Lib "kernel32" ()
Private Type LARGE_INTEGER
    LowPart As Long
    HighPart As Long
End Type
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim liFrequency As LARGE_INTEGER
    Dim cuFrequency As Currency, cuStart As Currency, cuStop As Currency
    Dim T As Long, liStart As LARGE_INTEGER, liStop As LARGE_INTEGER
    Const THREAD_BASE_PRIORITY_IDLE = -15
Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const HIGH_PRIORITY_CLASS = &H80
Const IDLE_PRIORITY_CLASS = &H40
Const NORMAL_PRIORITY_CLASS = &H20
Const REALTIME_PRIORITY_CLASS = &H100
Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function GetPriorityClass Lib "kernel32" (ByVal hProcess As Long) As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Sub tmBegin()
        QueryPerformanceCounter liStart
End Sub
Function tmEnd() As Long
QueryPerformanceCounter liStop
cuStart = LargeIntToCurrency(liStart)
cuStop = LargeIntToCurrency(liStop)
tmEnd = ((cuStop - cuStart) / cuFrequency) * 1000
End Function
   
Function Init()
If QueryPerformanceFrequency(liFrequency) = 0 Then
        MsgBox "Your hardware doesn't support a high-resolution performance counter!", vbInformation
    Else
        cuFrequency = LargeIntToCurrency(liFrequency)
End If
   
End Function
Private Function LargeIntToCurrency(liInput As LARGE_INTEGER) As Currency
    CopyMemory LargeIntToCurrency, liInput, LenB(liInput)
    LargeIntToCurrency = LargeIntToCurrency * 10000
End Function
Private Sub Form_Load()
Dim hThread As Long, hProcess As Long
Dim i As Long
Dim s(1 To 2) As String
    hThread = GetCurrentThread
    hProcess = GetCurrentProcess

   
Dim TimerCount As Long, GetTickCountCount As Long, timeGetTimeCount As Long
Dim TimerInterval As Long, GetTickCountInterval As Long, timeGetTimeInterval As Long
Dim l As Single
Init
MsgBox "Подождите 60 секунд!"
For i = 1 To 2
If i = 2 Then
SetThreadPriority hThread, THREAD_PRIORITY_TIME_CRITICAL
SetPriorityClass hProcess, REALTIME_PRIORITY_CLASS
Else
SetThreadPriority hThread, THREAD_PRIORITY_NORMAL
SetPriorityClass hProcess, NORMAL_PRIORITY_CLASS
End If
GetTickCountCount = 0
TimerCount = 0
timeGetTimeCount = 0
l = Timer
tmBegin
Do While Timer - l < 10
TimerCount = TimerCount + 1
Loop
TimerInterval = tmEnd


l = timeGetTime
tmBegin
Do While timeGetTime - l < 10000
timeGetTimeCount = timeGetTimeCount + 1
Loop
timeGetTimeInterval = tmEnd

l = GetTickCount
tmBegin
Do While GetTickCount - l < 10000
GetTickCountCount = GetTickCountCount + 1
Loop
GetTickCountInterval = tmEnd

    s(i) = "GetTickCount result: " & Format(GetTickCountCount, "###'###'###") & "(" & GetTickCountInterval & " ms)" & vbCrLf _
            & "TimeGetTime result: " & Format(timeGetTimeCount, "###'###'###") & "(" & timeGetTimeInterval & " ms)" & vbCrLf & _
              "Timer result: " & Format(TimerCount, "###'###'###") & "(" & TimerInterval & " ms)"
   
   
If i = 1 Then MsgBox "Осталось 30 секунд"
Next
MsgBox "Без приоритета реального времени:" & vbCrLf & s(1) & vbcrlf & String(10, "-") & vbCrLf & "С приоритетом реального времени:" & vbCrLf & s(2)
End
End Sub

P.S. Если скомпилировать проект то количество значительно возростает.
الفيجوال بيسك الرابح

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 01.03.2005 (Вт) 1:13

GM
Примерно во сколько раз? Кто-нибудь протестировал?

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 0:02

Вот решил написать новую прозьбу о помощи, не создавая ненужых тем (надеюсь этого не придется делать).

И так вот я решил из этого сделать что-то типа мини теста, пусть он и будет немного глупым.

Как-то я сел и посмотрел на последний получившейся цикл:
Код: Выделить всё
Option Explicit
Private Declare Function GetTickCount& Lib "kernel32" ()
Private Sub Form_Load()
Dim T&, I&
T = GetTickCount
While GetTickCount - T < 10000
I = I + 1
Wend
MsgBox "Ваш компьютер перерабатывает " & Int(I / 10) & " значений в секунду", vbOKOnly, "CPU Test"
Clipboard.Clear
Clipboard.SetText Int(I / 10)
Unload Me
End Sub

Что же мне здесь не понравилось? А то:
1) Используется проверка условий, что замедляет цикл.
2) В теле цикла присутствуют лишние элементы.

Я решил это исправить:
Код: Выделить всё
Dim T&, T1&, I&, otv&
T = GetTickCount
For I = 1 To 2147483646
Next I
T1 = (GetTickCount - T)
otv = I / (T1 / 1000)
Clipboard.Clear
Clipboard.SetText otv
MsgBox "Ваш компьютер перерабатывает " & otv & " значений в секунду", vbOKOnly, "CPU Test 2"


Это только часть всей программы, сильно прошу скачать мою новую версию и протестировать, мне для статистики нужно хотя бы еще 3 чужих результата. Нужно написать только ваш результат и процессор.
Кстати погрешность программы теперь равна 5% вместо 30% как было раньше. И результат увеличился примерно в 15 раз, добавил маленькую табличку (но это пока маленькую) с резульатами других процессоров.

Если кому-то что-то не понятно, то можете спросить... почему например там число 1 to 2147483646, пока я отвечать не буду, потому что считаю
что не мне здесь давать советы.

Жду вашей помощи, не надо заставлять меня создавать новую тему, прошу всего немного...
Вложения
CPU Test.rar
(8.87 Кб) Скачиваний: 19

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 12.03.2005 (Сб) 0:40

CPU Test писал(а):Ваш компьютер перерабатывает 600191070 значений в секунду.


На графике почти догнал Celeron 2500 MHz
Хотя у меня всего лишь Athlon XP 3000+ иными словами 2171.58 MHz
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 0:43

Спасибо, кстати все кто здесь написал, попадут в мою таблицу.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 12.03.2005 (Сб) 1:10

112983829
PIII - 464 MHz под управлением ХР.
Листинги не горят!

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 1:24

Жалко, но думаю, что 464 это почти 450, а такой результат уже есть в таблице...

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 12.03.2005 (Сб) 1:41

Athlon XP 2000+ 477536946

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 3:45

Вот в подтверждение своих слов уже выкладываю обновленную версию с вашими результатами. Не ругайтесь, если они окажутся чуть-чуть округленными.
Вложения
CPU Test.rar
(9.02 Кб) Скачиваний: 18

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 12.03.2005 (Сб) 3:50

CPU Test писал(а):Ваш компьютер перерабатывает 708506647 значений в секунду.


Что то проц разогнался...и перегнал Целерон! :D
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 12.03.2005 (Сб) 8:00

324933219 значений в секунду Celeron 1300. 2sashar2: Как насчет Real Time Priority ???
الفيجوال بيسك الرابح

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 10:45

FAKK2
Проверь поджалуйста еще раз. Если это действительно так, то я именю результат в таблице. Различие может быть из-за нагрева процессора.

GM
Если вам не сложно, не могли бы вы писать немного подробней, чем длинее предложение, там быстрее я его пойму :). Не забывайте, что я еще новичек, не могу я в с двух слов понять о чем идет речь...

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 10:51

Кстати, у меня ко всем возник вопрос, вот когда на форуме рисуется допустим круг (Circle), что нагружается? Т.е если этих кругов рисовать дофига, то на что нагрузка пойдет? Не думайте, что это для теста, просто мне интересно....

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 12.03.2005 (Сб) 11:18

sashar2
683911989
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 12.03.2005 (Сб) 13:31

Так все, теперь мне нужен только один человек, который имеет крутой пентиум, хотя бы 2800 Mhz, если есть такой то прошу откликнуться. У меня есть тесты двух атлонов (1800,2000,3000), трех селеронов (1300,2500,2800) и только двух пентов (450, 600).

И жду ответа от GM !
Вложения
CPU Test.rar
(9.08 Кб) Скачиваний: 13

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 13.03.2005 (Вс) 0:29

А вот у меня еще один вопрос, можно ли по этому тесту определить процессор т.е. на что реально тянет процессор? Или же можно только сравнивать с другими машинами?

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 91

    TopList