Jojobets |
Отправлено: 25.07.2005, 15:50 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Прилагаемый код по-разному работает на разных машинах. Во вкладыше два снимка: pc1.png отражает работу на первой системе (WinXp Pro SP1), pc2.png-на второй (WinXp Pro SP2). Как видим, на первой системе программа работает так, как ожидалось — время первого срабатывания и интервал срабатывания именно такие, какие устанавливались. Однако на второй системе программа работает иначе — сработала невовремя и интервал срабатывания с каждым "тиком" увеличивается!
Если кто сталкивался с такой проблемой, давайте обсудим.
|
|
timson |
Отправлено: 25.07.2005, 17:00 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
CODE | FILETIME ft;
...
SetWaitableTimer(myform->hSecondsTimer, (LARGE_INTEGER*)&ft, 5000UL, NULL, NULL, FALSE); | (LARGE_INTEGER*)&ft -!!!!!!!!!!
так некоректно, т.к. если даже размеры полей структур совпадают, но выравнивание границ может быть разное — sizeof(FILETIME) != sizeof(LARGE_INTEGER)
так коректнее:CODE | li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime; |
Еще вроде надо время указывать абсолютное (по гринвичу) — LocalFileTimeToFileTime()
Отредактировано timson — 25/07/2005, 17:02
|
|
Jojobets |
Отправлено: 25.07.2005, 18:06 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
sizeof(FILETIME) = sizeof(LARGE_INTEGER) = 8 байт.
Выравнивание данных можно осуществлять по границам байтов, установив соответствующие опции компилятора (Рихтер, привет ...).
Но дело даже не в этом. Никак не могу понять, почему возрастает интервал срабатывания ожидаемого таймера (внимательно см. pc2.png во вкладыше первого сообщения). |
|
timson |
Отправлено: 26.07.2005, 08:47 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
а если перекомпилить на второй системе???
|
|
Jojobets |
Отправлено: 26.07.2005, 10:33 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Ничего не дает перекомпиляция программы на других системах. |
|
timson |
Отправлено: 26.07.2005, 10:44 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
а если попробывать время задать отрицательным?? — есть же такая возможность (в хелпе подробно расписано)
|
|
Jojobets |
Отправлено: 26.07.2005, 17:03 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
В справке указано, что положительное время-абсолютное, отрицательное — относительное. Т.е. первый старт происходит через указанное количество времени после вызова SetWaitableTimer.
Подставлять отрицательное время не пробовал, стоит иная задача (больше нравится устанавливать абсолютное время:) ).
Пытаюсь выяснить, не внесли ли здесь свой "вклад" обновления винды, которые я недавно установил |
|
timson |
Отправлено: 27.07.2005, 06:58 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
кстати, у меня на WinXP Pro (en) SP2 нормально работает, каждые 5сек 7мс отчет пишет.
|
|