2013-02-21 3 views
2

Я пытаюсь передать некоторый код linux, который использует nanosleep() и get_clocktime() для окон. Насколько я читал, на самом деле не так много таймеров производительности на окнах, и нет реальных функций сна, кроме Sleep(). Я нашел QueryPerformanceCounter и QueryPerformanceFrequency на окнах, но как бы настроить те, которые будут использоваться с функцией быстрого сна. Код, в котором я пытаюсь порт расположен на этом StackOverflow сообщении: https://stackoverflow.com/a/13559213/1161270Таймеры и сон на окнах

В целом я пытаюсь порта код Linux для окон, которые используют nanosleep(), get_clocktime() и struct timespec, но, кажется, нет никакого реальных равнозначно. Я также открыт для других идей о том, как добавить задержки дроссельной заслонки. Я прочитал функции PdhGetFormattedCounterArray(), и у меня есть рабочий код для отслеживания выходной пропускной способности компьютера в байтах, но я не уверен, как использовать эти данные для создания задержки для дроссельной обратной передачи данных на определенную скорость kb/s , и предпочли бы использовать другой метод, предоставленный в связанном сообщении.

Спасибо за ваше время.

+0

Пингуется к NUL за задержку времени? – ProfessionalAmateur

+0

Я ищу высокочастотную синхронизацию/спящее решение. ping не будет работать, ведь 'Sleep()', который вычисляется в миллисекундах, не работает для того, что я пытаюсь выполнить. –

+1

Вы пробовали использовать Сон? Если вы не работаете с гигабитной сетью, миллисекунда составляет менее дюжины пакетов нормального размера, поэтому я не уверен, что вам действительно нужно ультратонкое разрешение. В конце концов, у вас нет такого большого контроля, когда пакеты отправляются фактически, они могут быть забуферированы и отправлены группами. Другим вариантом будет ожидание - ожидание, используя счетчики производительности для разработки прошедшего времени, но вы по-прежнему будете иметь неустойчивые промежутки, когда ваш поток отключается. –

ответ

0

Имейте в виду, что точность ACTUAL для большинства типов сна большинства ОС часто составляет миллисекунды (или даже несколько их кратных). Может показаться, что вы можете спать более короткие периоды, но на самом деле либо ОС фактически не переводит процесс в сон, либо период сна «тикает». Это справедливо для Linux (в зависимости от конфигурации ядра) и Windows.

Microsoft объясняет таймаут здесь (и сна просто тайм-аут ждет ничего, чтобы это произошло): http://msdn.microsoft.com/en-gb/library/windows/desktop/ms687069%28v=vs.85%29.aspx#waitfunctionsandtime-outintervals

+0

Это неправда для Linux - с современным ядром, скомпилированным с включенным «NOHZ» (который требует современный процессор с таймером высокой точности), спящий с зернистостью в десятки микросекунд очень возможен. – caf

+0

Хорошо, обновлено, чтобы покрыть «NOHZ». –