аналог waitformultipleobjects в linux

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

аналог waitformultipleobjects в linux

Сообщение ElectroGuard » 12.10.2016 12:51:45

доброго всем дня. скажите - существует ли какой-то аналог (либо эмуляция его работы на fpc) waitformultipleobjects в linux (ubunta)?
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Re: аналог waitformultipleobjects в linux

Сообщение Sergei I. Gorelkin » 13.10.2016 07:10:13

Примерным аналогом являются fpselect или fppoll.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: аналог waitformultipleobjects в linux

Сообщение serbod » 13.10.2016 11:11:38

TEvent, TEventObject (из syncobjs)
или
RTLEventCreate, RTLEventWaitFor, итд..
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: аналог waitformultipleobjects в linux

Сообщение heX » 17.09.2017 21:53:23

RTLEventWaitFor это аналог WaitForSingleObject.
А вот аналога WaitForMultipleObjects нет (просмотрел threadh.inc и syncobjs), но его легко эмулировать циклом и в теории быстродействие будет не особо хуже.
heX
новенький
 
Сообщения: 12
Зарегистрирован: 19.02.2016 17:20:32

Re: аналог waitformultipleobjects в linux

Сообщение ElectroGuard » 11.10.2017 19:59:27

Проблема, к сожалению, до сих пор надёжно не решена. Циклы и прочее - не совсем то. А точнее - совсем не то. Хорошего решения я пока так и не нашел.
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Re: аналог waitformultipleobjects в linux

Сообщение wadman » 12.10.2017 10:25:51

heX писал(а):но его легко эмулировать циклом

Не легко. Либо не точно по времени срабатывания, либо с тормозами.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: аналог waitformultipleobjects в linux

Сообщение serbod » 12.10.2017 16:28:53

ElectroGuard писал(а):Циклы и прочее - не совсем то.

wadman писал(а):Либо не точно по времени срабатывания, либо с тормозами.

Это вы предполагаете или имеете опыт?

WaitForSingleObject() при разрешающем семафоре проскакивает без задержки, а при запрещающем один хрен будет стоять до разрешающего сигнала или таймаута. Если один из нескольких WaitForSingleObject() вернет WAIT_TIMEOUT, то остальные не обязательно проверять. Где тут неточность или тормоза?
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: аналог waitformultipleobjects в linux

Сообщение olegy123 » 12.10.2017 18:57:10

Код: Выделить всё
windows.h
#if _WIN32_WINNT <= _WIN32_WINNT_WIN7
#define MAXIMUM_WAIT_OBJECTS 64
#else
#define MAXIMUM_WAIT_OBJECTS 128
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: аналог waitformultipleobjects в linux

Сообщение wadman » 13.10.2017 10:01:09

serbod писал(а):Это вы предполагаете или имеете опыт?

Опыт.

Если постоянно дергать ожидаемые объекты без перерыва, то это нагрузка на ядро.
Если давать потоку отдохнуть между опросами состояний, то это неточность.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: аналог waitformultipleobjects в linux

Сообщение serbod » 13.10.2017 11:18:05

wadman писал(а):Если постоянно дергать ожидаемые объекты без перерыва, то это нагрузка на ядро.

Что значит дергать ожидаемые объекты? Есть готовая функция проверки семафора WaitForSingleObject(), которая ничего не дергает и не нагружает. WaitForMultipleObjects() это то же самое, только проверяется не один семафор, а несколько по списку.

Если нужна real-time точность (наносекунды), то такие задачи лучше выполнять на отдельных микроконтроллерах или ASIC, а основной комп использовать для управления и хранения данных. Как в дисковых, сетевых, аудио и видео контроллерах, которые самостоятельно используют часть общей памяти когда им нужно, а не когда это нужно операционной системе.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: аналог waitformultipleobjects в linux

Сообщение ElectroGuard » 13.10.2017 12:59:08

Не только точность нужна, но и нагрузка на ядро = 0, как в винде. Там же как-то работает. Без отдельного микрокотнроллера, на этом же железе )
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Re: аналог waitformultipleobjects в linux

Сообщение wadman » 13.10.2017 14:01:39

serbod писал(а):Что значит дергать ожидаемые объекты?

Встречный вопрос: была хоть одна попытка реализовать?
Можно начать с простого: в цикле дергать пустую функцию и смотреть на нагрузку на ядро. Потом тоже самое, но со слипом или маленьким таймаутом.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: аналог waitformultipleobjects в linux

Сообщение olegy123 » 13.10.2017 15:37:18

https://www.youtube.com/watch?v=SIZmLPtcZiE
- там намного сложнее..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: аналог waitformultipleobjects в linux

Сообщение serbod » 13.10.2017 15:51:54

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
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: аналог waitformultipleobjects в linux

Сообщение wadman » 13.10.2017 16:37:22

serbod писал(а):Конечно.

А я о чем писал? Либо тормознутость, либо неточность. Неточность воспроизведена, осталось "угадать" вариант с тормознутостью: viewtopic.php?t=11435&view=unread#p126097
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru