2015-04-20 6 views
4

Мне нужен код, который предоставит «Ticks» из 10 миллисекунд точно, и я искривлен из-за многих статей, которые противоречат другим относительно того, как это сделать в Windows.Надежные короткие промежутки времени в Windows

Я выполнил первый шаг - используя MultiMedia таймер для обеспечения сна 1 мили.

Есть ли способ обеспечить, чтобы спящий код работал на всех машинах IsHighResolution как с истинными, так и с ложными, одно- или многопроцессорными системами и т. Д.?

[править] Предыдущий вопрос ragarding проблемы с помощью StopWatch в системе многоядерной: Multicore and thread aware .Net stopwatch? [/ править]

+0

Вы хотите измерить эти тики или вы хотите вызвать код в эти интервалы? Во-первых, самое лучшее решение - использовать секундомер – Georg

+1

@Georg - для вызова метода с точными интервалами. Кроме того, вы, похоже, не знаете о проблеме с StopWatch, посмотрите на ссылку, которую я добавил в вопросе. – Joezer

+2

@Maimonides. Эти проблемы, как правило, не возникают на последних процессорах (т. Е. За последние 5 лет), но в любом случае можно зафиксировать, установив привязку потоков. Но это не позволит вам спать за точное количество миллисекунд. –

ответ

0

жаль, что я не могу написать в комментариях ... Если у вас есть возможность использовать вторую нить можно использовать цикл, чтобы тратить время ... как это:

class yourTimer{ 
    public void startTimer(Action a) 
    { 
     ParameterizedThreadStart fu = new ParameterizedThreadStart(waiter); 
     Thread t1 = new Thread(fu); 
     t1.Start(a); 
    } 
    public void stopTimer() 
    private void waiter(object o) 
    { 
     Action ac = (Action)o; 
     while(waitin) 
     { 
      if(DateTime.Now.Millisecond%10==0) 
      { 
       ac.Invoke(); 
      } 
      continue; 
     } 
    } 
    } 

но это довольно уродливое решение, я думаю ...

 Смежные вопросы

  • Нет связанных вопросов^_^