Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.07.2008, 09:11   #21
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Даже здесь >>> знают что такое GetTickCount, Roof делай выводы

Как и обещал, пример
Вложения
Тип файла: rar OnIdle(OGL).rar (10.6 Кб, 14 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума
Старый 08.07.2008, 10:57   #22
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А я пример выше не давал разве ? Народ глаза откройте ? И что еще за выходки, если уже делать проверку на 5 секунд от GetTickCount так Так как я показывал в предыдущем посте, причем тут вообще sleep? Я чет не понимаю... И все таки прямой вызов Api в цикле while и т.п. быстрей чем получения сообщения WM_TIMER... тут как не крути...

p.s. спустя минуту вчитался в Ваш код eoln... А знаете что самое смешное ? вы вызваите GetTickCount а потом sleep() а потом еще раз GetTickCount а результат разница вызовов GetTickCount т.е. получается что вы сделали вычесление времени выполнения в ммсек функции sleep по средством GetTickCount а потом говорите что такой результат из-за GetTickCount ПАРАДОКС :D

Пример своего таймера... ну к примеру
Код:
var 
  TimerEnabled: Boolean; // включить выкл.

procedure Timer(Interval: DWORD);
var
  k: DWORD;
begin
  if TimerEnabled then
  begin
    k := GetTickCount;
    while TimerEnabled and (GetTickCount - k < Interval) do
    begin 
      // выполнение к примеру Application.ProcessMessages;
    end;
    if TimerEnabled then
    begin
      DoProcedure; // ваша функция
      Timer(Interval); // секундка прошла, опять ожидаем...
    end;
  end;
end;
На прочность не проверял.. писал прямо в броузере

Последний раз редактировалось BOBAH13; 08.07.2008 в 11:07.
BOBAH13 вне форума
Старый 08.07.2008, 11:36   #23
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Попробую вас помирить. Пример от eoln'а, конечно, не совсем верный - это именно для функции Sleep и родственных ей SleepEx, WaitForSingleObject и т.д. не гарантируется точное выдерживание интервалов, связанное, прежде всего, с переключением задач, но, тем не менее, GetTickCount тоже не обладает требуемой точностью - её интервалы можно узнать с помощью GetSystemTimeAdjustment. Чтобы не писать самому, , приведу листинг Марка Руссиновича - его утилитки ClockRes:
Код:
//======================================================================
//
// ClockRes
// By Mark Russinovich
// SysInternals - www.sysinternals.com
//
// This program is *very* simple. Just use GetSystemTimeAdjustment 
// to query the system clock interval.
// 
//======================================================================
#include <windows.h>



//----------------------------------------------------------------------
//
// Main
//
//----------------------------------------------------------------------
void main( int argc, char *argv[] )
{
    DWORD adjustment, clockInterval;
    BOOL  adjustmentDisabled;

    printf("\nClockRes - View the system clock resolution\n");
    printf("By Mark Russinovich\n");
    printf("SysInternals - www.sysinternals.com\n\n");
    GetSystemTimeAdjustment( &adjustment,
                             &clockInterval,
                             &adjustmentDisabled );
    printf( "The system clock interval is %d ms\n",
            clockInterval / 10000 );
}
Если запустить её, то видно, что разрешениетаймера не равно 1 мс. Вообще оно зависит от машины, у меня, скажем, это почти 10 мс. В этом легко убедиться с помощью такой "программы":

Код:
#include <windows.h>
int main()
{
	for(;;)
	{
		printf("%d\n", GetTickCount());
	}
}
В результате имеем что-то вроде:
Цитата:
152366791
152366801
152366801
152366801
152366801
152366801
152366801
152366801
152366801
152366811
152366811
152366811
152366811
152366821
152366821
152366821
152366821
152366821
152366831
152366831
152366831
152366841
152366841
152366841
т.е. видно, что GetTickCount делает пропуски по 10 (иногда и по 11) мс.
B_N вне форума
Старый 08.07.2008, 12:57   #24
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Если запустить её, то видно, что разрешениетаймера не равно 1 мс. Вообще оно зависит от машины, у меня, скажем, это почти 10 мс. В этом легко убедиться с помощью такой "программы":
Проверил у себя другим способом, тоже пропуски ровно по 10 мс.
Процессор Athlon XP 2500+ (1.83ГГц), может это не от машины, а в винде ограничение? и раньше чем через 10 мс GetTickCount не обновляется (сама функция, а не счетчик)?
А разрешение у него все таки 1мс, последняя цифра всегда разная (если запустить проверку несколько раз, это видно). Хотя вполне возможно она не значащая.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 08.07.2008 в 13:08.
mutabor вне форума
Старый 08.07.2008, 13:12   #25
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Проверил у себя другим способом, тоже пропуски ровно по 10 мс.
Процессор Athlon XP 2500+ (1.83ГГц), может это не от машины, а в винде ограничение? и раньше чем через 10 мс GetTickCount не обновляется (сама функция, а не счетчик)?
А разрешение у него все таки 1мс, последняя цифра всегда разная (если запустить проверку несколько раз, это видно).
Так я и не утверждаю, что последняя цифра всегда будет одна и та же. Но чисел, отличающихся строго на единицу не будет - факт. А от машины зависит точное значение, которое показывает GetSystemTimeAdjustment - 10мс получаются уже при делении с округлением, как видно из листинга. У меня, например, GetSystemTimeAdjustment возвращает 100144 интервалов по 100 нс, у кого-то - чуть иначе плюч возможная коррекция хода часов - первый параметр.
B_N вне форума
Старый 08.07.2008, 14:41   #26
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
2 zetrix - я движение квадратика на форме обрабатывал через Timer. А как вообще без таймера? - ума не приложу... опыта маловато..
что представляет собой таймер? Это объект. Его работу можно описать примерно так:
Код:
While Enable do
begin
sleep(Interval);
//а тут ваш код!
end;
Т.е. сделайте просто цикл и всё. Вопрос конечно будет куда его засунуть. Тут уже надо смотреть что вы пишите, толи на кнопку, толи ещё на что-нибудь.
zetrix вне форума
Старый 08.07.2008, 20:18   #27
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 mutabor и 2 Zetrix - спасибо за примеры. вроде разобрался.

2 mutabor - выводы сделал.

Всем за помощь спасибо.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума
Старый 08.07.2008, 20:19   #28
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

тему считаю закрытой
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать интервал между датами в фильтре Леон Microsoft Office Access 2 22.10.2008 11:16
Как поменять интервал между буквами в поле Acces? xruss Microsoft Office Access 9 08.05.2008 11:32
использование таймера KancJler Помощь студентам 13 19.04.2008 01:13
Время таймера в проге, -программно остановать. Air Общие вопросы Delphi 6 02.02.2008 18:49
межстрочный интервал в excel KorvinZ Microsoft Office Excel 2 16.01.2008 17:40