powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / точность отсчета времени +
13 сообщений из 13, страница 1 из 1
точность отсчета времени +
    #38462522
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
#include <iostream>
//
#include "h.h"
#include <ctype.h>
#include <ctime>
#include <Windows.h>
using namespace std;
	int n;
	int S;
void main (int argc, char*argv[]) 
{ 
  int n=0;
  int S=0;

  for(int i=1;i<argc;i++){
    if(cmp(argv[i],"-s")==0){ 
      if (argv[i+1]!=0)
         S = atoi(argv[i+1]);
      else 
        cout<<"ERrOR: Vi ne vvils znacheniya S"<<endl;
    }
    if(cmp(argv[i],"-n")==0) {    
      if(argv[i+1]!=0)
          n = atoi(argv[i+1]);
      else 
        cout<<"EROR: Vi ne vvils znacheniya N"<<endl;
		  
    }
  }
  clock_t start = clock();

  for (n;n>0;n--) Sleep(S); 

  clock_t end = clock();
  cout<< "\nTime = " << (double)(end-start)/CLOCKS_PER_SEC;
}







for (n;n>0;n--) Sleep(S); <---- n раз повторяю задержку на S милисекунд.
то есть

n= 1000 при S=1 должен был бы выдавать 1 сек общего времени,
если бы таймер в компе имел отсчет времени меньше чем одна тысячная.
Поскольку таймер в персоналках все наблюдаемое время (с 1990 года) имел точность 1/18.2
то результат работы этой программы был приблизительно такой
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462527
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потом заметили, что на семерках с 64битным процессором работает правильно,
и, только что обнаружил, что на xp с двумя ядрами тоже работает относительно правильно
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462534
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочется увидеть формальное обьяснение и/или
ссылку на доку.
Ссылку на доку почему 1000 задержек по одной тысячной дает 15 сек не надо, это я читал в 199? году. Надо почему сейчас стало правильно
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462547
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizПоскольку таймер в персоналках все наблюдаемое время (с 1990 года) имел точность 1/18.2Это было во времена DOS-а.

Ссылка на тему- http://habrahabr.ru/company/intel/blog/186998/
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462553
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizточность 1/18.2И, кстати, это не точность, а дискретность (шаг дискретизации).
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462587
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttchingizточность 1/18.2И, кстати, это не точность, а дискретность (шаг дискретизации).
дадада
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462589
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttchingizПоскольку таймер в персоналках все наблюдаемое время (с 1990 года) имел точность 1/18.2Это было во времена DOS-а.

Ссылка на тему- http://habrahabr.ru/company/intel/blog/186998/
да
>Период таймера Windows по умолчанию составляет 15.6 мс – он тикает 64 ра
все хотел разделить 1 секунду 15 мс да ленился.
будет 64 а не 18.2
)))
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462905
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttchingizточность 1/18.2И, кстати, это не точность, а дискретность (шаг дискретизации).

С такой частотой тикал один из каналов 8253 - PIT в стандартных писюках.
Но ничего не мешало "поддать жару" и ему. Так повесив на обработчик таймера функцию перебора пароля - вскрывали в лоб за несколько дней, на нескольки десяткофф машин :)

давно было дело правда...
(круглый)
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38462972
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0С такой частотой тикал один из каналов 8253 - PIT в стандартных писюках.
Но ничего не мешало "поддать жару" и ему.Системные часы начинали убегать, что сильно удивляло пользоваталей
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38468862
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftСистемные часы начинали убегать, что сильно удивляло пользоваталей Это у криворуких.
Остальные отдавали системе не каждое прерывание.
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38468905
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovmiksoftСистемные часы начинали убегать, что сильно удивляло пользоваталей Это у криворуких.
Остальные отдавали системе не каждое прерывание.Это когда задачей не является удивить пользователей :)
...
Рейтинг: 0 / 0
точность отсчета времени +
    #38469286
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
#pragma comment(lib,"winmm")
прикольная прагма для подключения библиотеки - раньше не знал



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
//  
#pragma comment(lib,"winmm")
#include <iostream>
//
#include <string.h>
#include <ctype.h>
#include <ctime>
//
#include <Windows.h>

//#include <dos.h>
using namespace std;


void main (int argc, char*argv[]) 
{ 
  int n=1000;
  int S=1;
  int d=0; 
  int dbgFlg = 0;

  for(int i=1;i<argc;i++){
    if(stricmp(argv[i],"-s")==0){ 
      if (argv[i+1]!=0)
         S = atoi(argv[i+1]);
      else 
        cout<<"ERROR:   sleep interval is missed"<<endl;
    }
    if(stricmp(argv[i],"-d")==0){ 
      dbgFlg = 1;
    }
    else if(stricmp(argv[i],"-n")==0) {    
      if(argv[i+1]!=0)
          n = atoi(argv[i+1]);
      else 
        cout<<"ERROR:  number of repetitions is missed"<<endl;
    }
    else if(stricmp(argv[i],"-r")==0) {    
      if(argv[i+1]!=0)
          d = atoi(argv[i+1]);
      else 
        cout<<"ERROR:  sampling rate is missed"<<endl;
    }             
    else if(strcmp(argv[i],"-?")==0)
      goto usage;
  }

  if (dbgFlg) 
    fprintf (stderr,"\n s/n/r:%d/%d/%d ", S, n, d);
  int rc =0;
  if (d!=0) {
    rc = timeBeginPeriod(d);
    if (dbgFlg)
      cerr<< "timeBeginPeriod(d)="<<rc;
  }

  time_t start = time(0);

//  for (n;n>0;n--) _sleep(S); 
  for (n;n>0;n--) { 
    Sleep(S); 
    if (dbgFlg && n%100 ==0 )
      cerr<< "\n"<<n;
  }

  time_t end = time(0);

  if (d!=0) {
    rc = timeEndPeriod(d);
    if (dbgFlg)
      cerr<< "timeEndPeriod(d)="<<rc;
  }
  cout<< "\nTime = " << (end-start);
  exit(0);
  usage:
  cout<< "\napp.exe [-s sss] [-n nnn] [-r ddd] [-d] : to repeat nnn times Sleep(sss) function" ;
  cout<< "\nsss : interval of sleeping. Default: "<<S ;
  cout<< "\nnnn : number of repetitions. Default: "<<n ;
  cout<< "\nddd : sampling rate. Default dont use  timeBeginPeriod(ddd)";
  exit(1);
}



и сишарповская версия с вызовом сишных программ из winmm.dll



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
class MMTimersTest
{
    [DllImport("winmm.dll")]
    private static extern uint timeBeginPeriod(uint period);
    [DllImport("winmm.dll")]
    private static extern uint timeEndPeriod(uint period);
  
 
    static void Main(string []agrs)
    {
        if (agrs.Length < 1)
          { Console.WriteLine("usage: \n timer XXXX\n where XXXX msecs - period of sleeping"); }
        else if (agrs[0] == "-?")
          { Console.WriteLine("usage: \n timer XXXX\n where XXXX msecs - period of sleeping"); }
        else
        {
            Console.WriteLine(" 1 Timer frequency in ticks per second = {0}", 
               Stopwatch.Frequency);
            int l = Int32.Parse(agrs[0]);
            Stopwatch stopWatch = new Stopwatch();
            uint period = 1;
            Console.WriteLine("Non-Standart tick {0} msecs", period);

            
            
            uint rc = timeBeginPeriod(period);
            Console.WriteLine(" now interval =   {0}secs, rc = {1}", period/1000.0, rc );

            stopWatch.Start();
            for (int i = 1; i <= 1000; i++)
            {
                Thread.Sleep(l);
            }
            stopWatch.Stop();

            rc = timeEndPeriod(period);
            Console.WriteLine(" timeEndPeriod, rc = {0}", rc);

            TimeSpan ts = stopWatch.Elapsed;

            // Format and display the TimeSpan value.
            string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                ts.Hours, ts.Minutes, ts.Seconds,
                ts.Milliseconds / 10);

            Console.WriteLine("RunTime " + elapsedTime);
            Console.WriteLine("Standart tick");
            Stopwatch stopWatch1 = new Stopwatch();
            stopWatch1.Start();
            for (int i = 1; i <= 1000; i++)
            {
                Thread.Sleep(l);
            }
            stopWatch1.Stop();

             ts = stopWatch1.Elapsed;

            elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                ts.Hours, ts.Minutes, ts.Seconds,
                ts.Milliseconds / 10);
            Console.WriteLine("RunTime " + elapsedTime);
        
        
        
        }
    }


...
Рейтинг: 0 / 0
точность отсчета времени +
    #38469291
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

OFF/2(что то напомнилось):
когда-то, показывая маленькую свою тулзу(перегрузка компа через заданное кол-во минут-секунд, ДОС) одному человеку он вдруг спросил "А можешь чтоб в памяти ничего не оставалось?" Тогда с ходу ответил "нет". Но спустя некоторое время эта тулза перегружала писюк, ничего не оставляла в памяти при этом(от момента задания, до момента перегрузки).

(круглый)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / точность отсчета времени +
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]