аналог waitformultipleobjects в linux
Модератор: Модераторы
-
ElectroGuard
- новенький
- Сообщения: 71
- Зарегистрирован: 03.06.2016 11:10:22
аналог waitformultipleobjects в linux
доброго всем дня. скажите - существует ли какой-то аналог (либо эмуляция его работы на fpc) waitformultipleobjects в linux (ubunta)?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Примерным аналогом являются fpselect или fppoll.
RTLEventWaitFor это аналог WaitForSingleObject.
А вот аналога WaitForMultipleObjects нет (просмотрел threadh.inc и syncobjs), но его легко эмулировать циклом и в теории быстродействие будет не особо хуже.
А вот аналога WaitForMultipleObjects нет (просмотрел threadh.inc и syncobjs), но его легко эмулировать циклом и в теории быстродействие будет не особо хуже.
-
ElectroGuard
- новенький
- Сообщения: 71
- Зарегистрирован: 03.06.2016 11:10:22
Проблема, к сожалению, до сих пор надёжно не решена. Циклы и прочее - не совсем то. А точнее - совсем не то. Хорошего решения я пока так и не нашел.
heX писал(а):но его легко эмулировать циклом
Не легко. Либо не точно по времени срабатывания, либо с тормозами.
- serbod
- постоялец
- Сообщения: 449
- Зарегистрирован: 16.09.2016 10:03:02
- Откуда: Минск
- Контактная информация:
ElectroGuard писал(а):Циклы и прочее - не совсем то.
wadman писал(а):Либо не точно по времени срабатывания, либо с тормозами.
Это вы предполагаете или имеете опыт?
WaitForSingleObject() при разрешающем семафоре проскакивает без задержки, а при запрещающем один хрен будет стоять до разрешающего сигнала или таймаута. Если один из нескольких WaitForSingleObject() вернет WAIT_TIMEOUT, то остальные не обязательно проверять. Где тут неточность или тормоза?
Код: Выделить всё
windows.h
#if _WIN32_WINNT <= _WIN32_WINNT_WIN7
#define MAXIMUM_WAIT_OBJECTS 64
#else
#define MAXIMUM_WAIT_OBJECTS 128serbod писал(а):Это вы предполагаете или имеете опыт?
Опыт.
Если постоянно дергать ожидаемые объекты без перерыва, то это нагрузка на ядро.
Если давать потоку отдохнуть между опросами состояний, то это неточность.
- serbod
- постоялец
- Сообщения: 449
- Зарегистрирован: 16.09.2016 10:03:02
- Откуда: Минск
- Контактная информация:
wadman писал(а):Если постоянно дергать ожидаемые объекты без перерыва, то это нагрузка на ядро.
Что значит дергать ожидаемые объекты? Есть готовая функция проверки семафора WaitForSingleObject(), которая ничего не дергает и не нагружает. WaitForMultipleObjects() это то же самое, только проверяется не один семафор, а несколько по списку.
Если нужна real-time точность (наносекунды), то такие задачи лучше выполнять на отдельных микроконтроллерах или ASIC, а основной комп использовать для управления и хранения данных. Как в дисковых, сетевых, аудио и видео контроллерах, которые самостоятельно используют часть общей памяти когда им нужно, а не когда это нужно операционной системе.
-
ElectroGuard
- новенький
- Сообщения: 71
- Зарегистрирован: 03.06.2016 11:10:22
Не только точность нужна, но и нагрузка на ядро = 0, как в винде. Там же как-то работает. Без отдельного микрокотнроллера, на этом же железе )
serbod писал(а):Что значит дергать ожидаемые объекты?
Встречный вопрос: была хоть одна попытка реализовать?
Можно начать с простого: в цикле дергать пустую функцию и смотреть на нагрузку на ядро. Потом тоже самое, но со слипом или маленьким таймаутом.
https://www.youtube.com/watch?v=SIZmLPtcZiE
- там намного сложнее..
- там намного сложнее..
- serbod
- постоялец
- Сообщения: 449
- Зарегистрирован: 16.09.2016 10:03:02
- Откуда: Минск
- Контактная информация:
wadman писал(а):Встречный вопрос: была хоть одна попытка реализовать?
Конечно. Специально еще раз проверил, Ubuntu Linux 14.04 LTS x64, под VirtualBox 5.1.26 запущенной на Windows 7 x64, комп i3-4170 3.70 GHz / 8Gb
Lazarus 1.9 FPC 3.1.1
Код: Выделить всё
Event.ResetEvent();
Event.WaitFor(10000);при ожидании сигнала загрузка процессора 0.0%
Код: Выделить всё
Event.SetEvent();
for i := 1 to 10000000 do Event.WaitFor(10000); // 10 миллионов циклов3.785 секунд или 2 642 008 циклов в секунду.
serbod писал(а):Конечно.
А я о чем писал? Либо тормознутость, либо неточность. Неточность воспроизведена, осталось "угадать" вариант с тормознутостью: viewtopic.php?t=11435&view=unread#p126097
