|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 13, 2004 12:35:32 Hi all. Есть ли стандартные способы получения скорости соединения? |
|
|
Дата: Ноя 14, 2004 03:17:13 MIB_IFROW STRUCT wszName db 512 dup (?) ; имя интерфейса dwIndex dd ? ;516 индекс интерфейса dwType dd ? ;520 тип интерфейса dwMtu dd ? ;524 максимальная скорость передачи dwSpeed dd ? ;528 текущая скорость передачи в битах в секунду dwPhysAddrLen dd ? ;532 bPhysAddr1 dd ? bPhysAddr2 dd ? ;540 физический адрес интерфейса dwAdminStatus dd ? dwOperStatus dd ? ;548 Содержит текущий статус интерфейса dwLastChange dd ? ;552 dwInOctets dd ? ;556 Всего принято байт через интерфейс dwInUcastPkts dd ? ;560 dwInNUCastPkts dd ? ;564 dwInDiscards dd ? ;568 dwInErrors dd ? ;572 dwInUnknownProtos dd ? ;576 dwOutOctets dd ? ;580 Всего отправлено байт через интерфейс !!!!! dwOutUCastPkts dd ? ;584 dwOutNUCastPkts dd ? ;588 количество ненаправленных пакетов отправленных интерфейсом dwOutDiscards dd ? ;592 количество забракованных исходящих пакетов dwOutErrors dd ? ;596 количество исходящих пакетов содержащих ошибки dwOutQLen dd ? ;600 dwDescrLen dd ? ;604 bDescr db 256 dup (?) ;860 Наименование интерфейса (имя) MIB_IFROW ENDS invoke GlobalAlloc,GMEM_MOVEABLE,20480 mov [tcphand],eax invoke GlobalLock,eax mov [tcpmem],eax mov [reqsize],20000 invoke GetIfTable,[tcpmem],addr reqsize,FALSE mov esi,[tcpmem] add esi,4 assume esi:PTR MIB_IFROW а дальше уже понятно наверно ;) |
|
|
Дата: Ноя 14, 2004 21:48:18 а дальше уже понятно наверно ;) Чем дальше в лес, тем толще партизаны :( Почему скорость соединения например с Инетом полученная этим способом, совпадает со значением, показываемым Виндой, а количество отправленного и принятого траффика - нет, например: принято [edx].dwInOctets = 56716, а Винда показывает принято 57324. И для отправленного тоже есть разница, только отправленного Винда показывает чуть меньше Почему так? |
|
|
Дата: Ноя 15, 2004 11:59:14 хм действительно так :) но я не знаю даже почему может всякие там пропинговки в счет не идут ? да и принципиально ведь теряются даже не десятые а сотые процента а меня это устраивает |
|
|
Дата: Ноя 15, 2004 14:44:22 BLOWFISH Да это особо не мешает, просто хотелось знать, почему. И ещё один момент, может подскажешь? В каком формате выводится время последнего установления соединения: FILETIME, MS-DOS Time или ещё что? Ни под какое что-то не подходит, в т.ч. и GetTickCount тоже... |
|
|
Дата: Ноя 16, 2004 03:24:26 да я даже не вкурсе, както не интересовало, мне важно было только скорость и трафик а время я учитывал по другому. посмотри в msdn может что найдешь. |
|
|
Дата: Ноя 16, 2004 03:31:14 Блин, я его весь перерыл, все форматы времени посмотрел, ни на один не похоже :((( |
|
|
Дата: Ноя 16, 2004 04:39:21 cresta может это просто time_t? какие там числа обычно? |
|
|
Дата: Ноя 16, 2004 05:18:39 · Поправил: cresta Я тут на одном немецком форуме только что нарыл такую инфу: dwLastChange Specifies the length of time, in centaseconds (10^-2 sec), that elapsed between January 1, 1601, and the last change of the operational status of the interface (connection). The value rolls over after 2^32 centaseconds. Блин, это ж надо было так зашифровать :-\ Единица времени в 100000 раз крупнее FILETIME.dwLowDateTime плюс к тому же и rollover каждые примерно 497 дней :(( Т.е. у меня PrintDec [ebx].dwLastChange выдаёт на сегодняшний день и примерно на текущее время -1100862793. Теперь ещё надо попробовать подогнать под текущую дату. Маразма сплошная ... Трудно было им обычный FILETIME вставить. Попробовал в FILETIME перевести, что-то не очень срастается |
|
|
Дата: Ноя 16, 2004 05:31:45 а не легче ли будет крутиться в цикле пока нету соединения а когда оно повилось GetTickCount потом снова в цикле пока есть соединение и по окончании GetTickCount ? |
|
|
Дата: Ноя 16, 2004 05:48:15 cresta Крупнее она в 10000000 раз, FILETIME микрософт в наносекундах меряет ;) Алгоритм перевода примерно такой: GetSystemTimeAsFileTime(&time);
time/=10000000;//тут без 64х-битной арифметики не обойтись
if(time.low<dwLastChange)//событие у нас было в прошлом
time.high--;//поэтому исправим старшую часть
time.low=dwLastChange;//ну а младшая часть у нас уже есть
time*=10000000; |
|
|
Дата: Ноя 16, 2004 19:06:03 Black_mirror По-моему ты ошибаешься, не в наносекундах, а 100 нс- интервалах: The FILETIME data structure is a 64-bit value representing the number of 100-nanosecond intervals... Так что наверное, все-таки 2 порядка надо скинуть, единица для FILETIME равна 10^-7, но не 10^-9 BLOWFISH Можно конечно и так, но это несколько криво, да и необходимо все время программу крутить, чтобы не прозевать подключение |
|
|
Дата: Ноя 16, 2004 19:34:47 cresta Действительно ошибаюсь, я в какой-то книжке читал что в наносекундах меряется, нужно внимательно смотреть первоисточники 8) |
|
|
Дата: Ноя 16, 2004 22:50:38 Сделал так (правда не с 64 битной арифметикой, а просто через FpuLib) .data
mulData db 10 Dup (0) ;для исходного
divData db 10 Dup (0) ;для деленного на 100000
.code
invoke GetSystemTimeAsFileTime,ADDR FTime
lea eax,mulData
m2m [eax],FTime.dwLowDateTime
add eax,4
m2m [eax],FTime.dwHighDateTime
mov eax,100000
invoke FpuDiv, ADDR mulData, eax, ADDR divData, SRC1_REAL or SRC2_DIMM
lea eax,divData
m2m FTime.dwLowDateTime,[eax]
add eax,4
m2m FTime.dwHighDateTime,[eax]
mov ecx,FTime.dwLowDateTime
cmp ecx,[ebx].dwLastChange
jae @F
dec FTime.dwHighDateTime
@@:
m2m FTime.dwLowDateTime,[ebx].dwLastChange
m2m [eax],FTime.dwHighDateTime
sub eax,4
m2m [eax],FTime.dwLowDateTime
mov eax,100000
invoke FpuMul, ADDR divData, eax, ADDR mulData, SRC1_REAL or SRC2_DIMM
invoke FileTimeToLocalFileTime,ADDR mulData,ADDR FTime
invoke FileTimeToSystemTime,ADDR FTime,ADDR STime
PrintDec STime.wHour
PrintDec STime.wMinute
PrintDec STime.wSecond
PrintDec [ebx].dwLastChange |
|
|
Дата: Ноя 17, 2004 17:48:39 invoke GlobalAlloc,GMEM_MOVEABLE,20480 mov [tcpmem],eax invoke GlobalLock,eax mov [tcpmem],eax mov [reqsize],20000 invoke GetIfTable,[tcpmem],addr reqsize,FALSE mov esi,[tcpmem] add esi,4 assume esi:PTR MIB_IFROW invoke MessageBox, 0, addr [esi].wszName, NULL, MB_OK Сори, почему не работает? =) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.111 |