Moxa V2426A-C2-W7E Руководство по аппаратной части онлайн [31/88] 170938

Moxa V2426A-C2-T Руководство пользователя онлайн [31/88] 170936
V2400A Series Expansion Modules Software Installation and Programming Guide
4-11
{
if (mngr) mngr->dispatch = 0;
}
#define MAX_TIME 0XFFFFFFFF
/*** start and dispatch the timer operations \
Inputs: \
<mngr> the manager \
Returns: \
none \
***/
void
digit_io_timer_dispatch(DGIOMNGR *mngr)
{
DGIOITEM *item;
unsigned int ms_sleep, n;
#if !defined(_WIN32_WCE) && !defined(WIN32)
struct timeval to;
#endif
mngr->dispatch = 1;
while(mngr->list && mngr->dispatch)
{
for (item = mngr->list; item != NULL; item = item->next)
{
if (mngr->now_time < item->next_time) /* not yet */
continue;
/*** overdue, executable ***/
n = mngr->now_time - item->next_time;
/*** move to the next time ***/
item->next_time = mngr->now_time+item->interval-n;
dgio_input_change_exec(mngr, item);
}
ms_sleep = MAX_TIME;
/*** get the amount of time to sleep ***/
for (item = mngr->list; item != NULL; item = item->next)
{
if (mngr->now_time < item->next_time) /*** not yet ***/
{
n = item->next_time - mngr->now_time;
if (n < ms_sleep) ms_sleep = n;
continue;
}
}
if (ms_sleep!=MAX_TIME)
{
#if !defined(_WIN32_WCE) && !defined(WIN32)
to.tv_sec = ms_sleep/1000;
to.tv_usec = (ms_sleep%1000)*1000;
if (select (0, NULL, NULL, 0, &to) != 0) /* sleep */
break;
#else
Sleep(ms_sleep);
#endif
mngr->now_time += ms_sleep;
}

Содержание

Похожие устройства

Скачать