• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ PR_NotifyCondVar函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中PR_NotifyCondVar函数的典型用法代码示例。如果您正苦于以下问题:C++ PR_NotifyCondVar函数的具体用法?C++ PR_NotifyCondVar怎么用?C++ PR_NotifyCondVar使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了PR_NotifyCondVar函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: AlarmFn2

static PRBool AlarmFn2(PRAlarmID *id, void *clientData, PRUint32 late)
{
#if defined(XP_MAC)
#pragma unused (id)
#endif

    PRBool keepGoing;
    PRStatus rv = PR_SUCCESS;
    AlarmData *ad = (AlarmData*)clientData;
    PRIntervalTime interval, now = PR_IntervalNow();

    PR_Lock(ad->ml);
    ad->times += 1;
    keepGoing = ((PRIntervalTime)(now - ad->timein) < ad->duration) ?
        PR_TRUE : PR_FALSE;
    interval = (ad->period + ad->rate - 1) / ad->rate;

    if (!late && (interval > 10))
    {
        interval &= (now & 0x03) + 1;
        PR_WaitCondVar(ad->cv, interval);
    }

    if (!keepGoing) rv = PR_NotifyCondVar(ad->cv);

    PR_Unlock(ad->ml);


    if (rv != PR_SUCCESS)
		failed_already=1;;

    return keepGoing;
}  /* AlarmFn2 */
开发者ID:AbrahamJewowich,项目名称:FreeSWITCH,代码行数:33,代码来源:alarm.c


示例2: PrivateCondVarThread

/* Thread that gets notified; no other threads use the same condvar */
void PR_CALLBACK
PrivateCondVarThread(void *_info)
{
    threadinfo *info = (threadinfo *)_info;
    PRInt32 index;

    for (index=0; index<info->loops; index++) {
        PR_Lock(info->lock);
        if (*info->tcount == 0) {
	    DPRINTF(("PrivateCondVarThread: thread 0x%lx waiting on cvar = 0x%lx\n",
				PR_GetCurrentThread(), info->cvar));
            PR_WaitCondVar(info->cvar, info->timeout);
	}
#if 0
        printf("solo   thread %ld notified in loop %ld\n", info->id, index);
#endif
        (*info->tcount)--;
        PR_Unlock(info->lock);

        PR_Lock(info->exitlock);
        (*info->exitcount)++;
        PR_NotifyCondVar(info->exitcvar);
DPRINTF(("PrivateCondVarThread: thread 0x%lx notified exitcvar = 0x%lx cnt = %ld\n",
			PR_GetCurrentThread(), info->exitcvar,(*info->exitcount)));
        PR_Unlock(info->exitlock);
    }
#if 0
    printf("solo   thread %ld terminating\n", info->id);
#endif
}
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.external,代码行数:31,代码来源:cvar2.c


示例3: PR_IMPLEMENT

PR_IMPLEMENT(PRAlarmID*) PR_SetAlarm(
    PRAlarm *alarm, PRIntervalTime period, PRUint32 rate,
    PRPeriodicAlarmFn function, void *clientData)
{
    /*
     * Create a new periodic alarm an existing current structure.
     * Set up the context and compute the first notify time (immediate).
     * Link the new ID into the head of the list (since it's notifying
     * immediately).
     */

    PRAlarmID *id = PR_NEWZAP(PRAlarmID);

    if (!id)
        return NULL;

    id->alarm = alarm;
    PR_INIT_CLIST(&id->list);
    id->function = function;
    id->clientData = clientData;
    id->period = period;
    id->rate = rate;
    id->epoch = id->nextNotify = PR_IntervalNow();
    (void)pr_PredictNextNotifyTime(id);

    PR_Lock(alarm->lock);
    PR_INSERT_BEFORE(&id->list, &alarm->timers);
    PR_NotifyCondVar(alarm->cond);
    PR_Unlock(alarm->lock);

    return id;
}  /* PR_SetAlarm */
开发者ID:Akin-Net,项目名称:mozilla-central,代码行数:32,代码来源:pralarm.c


示例4: PR_IMPLEMENT

/*
** Notify the highest priority thread waiting on the condition
** variable. If a thread is waiting on the condition variable (using
** PR_Wait) then it is awakened and begins waiting on the monitor's lock.
*/
PR_IMPLEMENT(PRStatus) PR_Notify(PRMonitor *mon)
{
    PRThread *me = _PR_MD_CURRENT_THREAD();
    if (mon->cvar->lock->owner != me) return PR_FAILURE;
    PR_NotifyCondVar(mon->cvar);
    return PR_SUCCESS;
}
开发者ID:Akin-Net,项目名称:mozilla-central,代码行数:12,代码来源:prmon.c


示例5: SharedCondVarThread

/* Thread that gets notified; many threads share the same condvar */
void PR_CALLBACK
SharedCondVarThread(void *_info)
{
    threadinfo *info = (threadinfo *)_info;
    PRInt32 index;

    for (index=0; index<info->loops; index++) {
        PR_Lock(info->lock);
        if (*info->tcount == 0)
            PR_WaitCondVar(info->cvar, info->timeout);
#if 0
        printf("shared thread %ld notified in loop %ld\n", info->id, index);
#endif
        (*info->tcount)--;
        PR_Unlock(info->lock);

        PR_Lock(info->exitlock);
        (*info->exitcount)++;
        PR_NotifyCondVar(info->exitcvar);
        PR_Unlock(info->exitlock);
    }
#if 0
    printf("shared thread %ld terminating\n", info->id);
#endif
}
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.external,代码行数:26,代码来源:cvar2.c


示例6: lock

//static
void
XPCJSRuntime::WatchdogMain(void *arg)
{
    XPCJSRuntime* self = static_cast<XPCJSRuntime*>(arg);

    // Lock lasts until we return
    AutoLockJSGC lock(self->mJSRuntime);

    PRIntervalTime sleepInterval;
    while (self->mWatchdogThread)
    {
        // Sleep only 1 second if recently (or currently) active; otherwise, hibernate
        if (self->mLastActiveTime == -1 || PR_Now() - self->mLastActiveTime <= 2*PR_USEC_PER_SEC)
            sleepInterval = PR_TicksPerSecond();
        else
        {
            sleepInterval = PR_INTERVAL_NO_TIMEOUT;
            self->mWatchdogHibernating = PR_TRUE;
        }
#ifdef DEBUG
        PRStatus status =
#endif
            PR_WaitCondVar(self->mWatchdogWakeup, sleepInterval);
        JS_ASSERT(status == PR_SUCCESS);
        JSContext* cx = nsnull;
        while((cx = js_NextActiveContext(self->mJSRuntime, cx)))
        {
            JS_TriggerOperationCallback(cx);
        }
    }

    /* Wake up the main thread waiting for the watchdog to terminate. */
    PR_NotifyCondVar(self->mWatchdogWakeup);
}
开发者ID:lofter2011,项目名称:Icefox,代码行数:35,代码来源:xpcjsruntime.cpp


示例7: PR_IMPLEMENT

/*
** Exit the lock associated with the monitor once.
*/
PR_IMPLEMENT(PRStatus) PR_ExitMonitor(PRMonitor *mon)
{
    PRThread *me = _PR_MD_CURRENT_THREAD();
    PRStatus rv;

    PR_ASSERT(mon != NULL);
    PR_Lock(&mon->lock);
    /* the entries should be > 0 and we'd better be the owner */
    PR_ASSERT(mon->entryCount > 0);
    PR_ASSERT(mon->owner == me);
    if (mon->entryCount == 0 || mon->owner != me)
    {
        rv = PR_Unlock(&mon->lock);
        PR_ASSERT(rv == PR_SUCCESS);
        return PR_FAILURE;
    }

    mon->entryCount -= 1;  /* reduce by one */
    if (mon->entryCount == 0)
    {
        /* and if it transitioned to zero - notify an entry waiter */
        /* make the owner unknown */
        mon->owner = NULL;
        if (mon->notifyTimes != 0) {
            _PR_PostNotifiesFromMonitor(&mon->waitCV, mon->notifyTimes);
            mon->notifyTimes = 0;
        }
        rv = PR_NotifyCondVar(&mon->entryCV);
        PR_ASSERT(rv == PR_SUCCESS);
    }
    rv = PR_Unlock(&mon->lock);
    PR_ASSERT(rv == PR_SUCCESS);
    return PR_SUCCESS;
}
开发者ID:Akesure,项目名称:jxcore,代码行数:37,代码来源:prmon.c


示例8: AcceptThread

static void AcceptThread(void *arg)
{
    PRIntn bytesRead;
    char dataBuf[ACCEPT_READ_BUFSIZE];
    PRFileDesc  *arSock;
    PRNetAddr   *arAddr;

    bytesRead = PR_AcceptRead( listenSock, 
        &arSock,
        &arAddr,
        dataBuf,
        ACCEPT_READ_DATASIZE,
        PR_SecondsToInterval(1));

    if ( bytesRead == -1 && PR_GetError() == PR_IO_TIMEOUT_ERROR )
        if ( debug ) printf("AcceptRead timed out\n");
    else
        if ( debug ) printf("Oops! read: %d, error: %d\n", bytesRead, PR_GetError());

    while( state != AllDone )  {
        PR_Lock( ml );
        while( state != RunAcceptRead )
            PR_WaitCondVar( cv, PR_INTERVAL_NO_TIMEOUT );
        if ( ++iCounter >= jitter )
            state = AllDone;
        else
            state = RunJitter;
        if ( verbose ) printf(".");
        PR_NotifyCondVar( cv );
        PR_Unlock( ml );
        PR_Write( file1, ".", 1 );
    }

    return;
} /* end AcceptThread() */
开发者ID:bringhurst,项目名称:vbox,代码行数:35,代码来源:ntioto.c


示例9: void

static TimerEvent *CreateTimer(
    PRIntervalTime timeout,
    void (*func)(void *),
    void *arg)
{
    TimerEvent *timer;
    PRCList *links, *tail;
    TimerEvent *elem;

    timer = PR_NEW(TimerEvent);
    if (NULL == timer)
    {
        PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
        return timer;
    }
    timer->absolute = PR_IntervalNow() + timeout;
    timer->func = func;
    timer->arg = arg;
    timer->ref_count = 2;
    PR_Lock(tm_vars.ml);
    tail = links = PR_LIST_TAIL(&tm_vars.timer_queue);
    while (links->prev != tail)
    {
        elem = TIMER_EVENT_PTR(links);
        if ((PRInt32)(timer->absolute - elem->absolute) >= 0)
        {
            break;
        }
        links = links->prev;
    }
    PR_INSERT_AFTER(&timer->links, links);
    PR_NotifyCondVar(tm_vars.new_timer);
    PR_Unlock(tm_vars.ml);
    return timer;
}
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:35,代码来源:prmwait.c


示例10: notify_timerq

static void
notify_timerq(PRThreadPool *tp)
{
	/*
	 * wakeup the timer thread(s)
	 */
	PR_NotifyCondVar(tp->timerq.cv);
}
开发者ID:Akesure,项目名称:jxcore,代码行数:8,代码来源:prtpool.c


示例11: started

void Resolver :: started()
{
    PR_Lock(dnslock);
    awake = PR_TRUE;
    ok = PR_TRUE; // successful start, async DNS is now enabled
    PR_NotifyCondVar(initcvar);
    PR_Unlock(dnslock);
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:8,代码来源:arlib.cpp


示例12: error

void Resolver :: error()
{
    PR_Lock(dnslock);
    awake = PR_TRUE;
    ok = PR_FALSE; // couldn't initialize resolver
    PR_NotifyCondVar(initcvar);
    PR_Unlock(dnslock);
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:8,代码来源:arlib.cpp


示例13: expire

void DNSSession :: expire()
{
    // set status
    PR_Lock(lock);
    status = DNS_TIMED_OUT;
    awake = PR_TRUE;
    PR_NotifyCondVar(cvar);
    PR_Unlock(lock);
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:9,代码来源:arlib.cpp


示例14: complete

void DNSSession :: complete()
{
    // set status
    PR_Lock(lock);
    status = DNS_COMPLETED;
    awake = PR_TRUE;
    PR_NotifyCondVar(cvar);
    PR_Unlock(lock);
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:9,代码来源:arlib.cpp


示例15: PR_NotifyCondVar

void
LdapSessionPool::add_free_session(LdapSession *session)
{
    _active_list.Delete (session);
    _free_list.Append (session);
    if (_waiters) {
      // tell the waiters that we might have something for them
      PR_NotifyCondVar (_cvar);
    }
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:10,代码来源:LdapSessionPool.cpp


示例16: PR_IMPLEMENT

PR_IMPLEMENT(void) PR_PostSem(PRSemaphore *semaphore)
{
    static PRBool unwarned = PR_TRUE;
    if (unwarned) unwarned = _PR_Obsolete(
                                     "PR_PostSem", "locks & condition variables");
    PR_Lock(semaphore->cvar->lock);
    PR_NotifyCondVar(semaphore->cvar);
    semaphore->count += 1;
    PR_Unlock(semaphore->cvar->lock);
}  /* PR_PostSem */
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:10,代码来源:ptsynch.c


示例17: SetServerState

/* --- Server state functions --------------------------------------------- */
void
SetServerState(char *waiter, PRInt32 state)
{
    PR_Lock(ServerStateCVLock);
    ServerState = state;
    PR_NotifyCondVar(ServerStateCV);

	if (debug_mode) DPRINTF("\t%s changed state to %d\n", waiter, state);

    PR_Unlock(ServerStateCVLock);
}
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.external,代码行数:12,代码来源:servr_kk.c


示例18: PR_IMPLEMENT

/*
** This routine increments the counter value of the semaphore. If other threads 
** are blocked for the semaphore, then the scheduler will determine which ONE 
** thread will be unblocked.
*/
PR_IMPLEMENT(void) PR_PostSem(PRSemaphore *sem)
{
#ifdef HAVE_CVAR_BUILT_ON_SEM
	_PR_MD_POST_SEM(&sem->md);
#else
	PR_Lock(sem->cvar->lock);
	if (sem->waiters)
		PR_NotifyCondVar(sem->cvar);
	sem->count++;
	PR_Unlock(sem->cvar->lock);
#endif
}
开发者ID:Akesure,项目名称:jxcore,代码行数:17,代码来源:prsem.c


示例19: lockedVars_AddToCount

int	/* returns count */
lockedVars_AddToCount(lockedVars * lv, int addend)
{
    int rv;

    PR_Lock(lv->lock);
    rv = lv->count += addend;
    if (rv <= 0) {
	PR_NotifyCondVar(lv->condVar);
    }
    PR_Unlock(lv->lock);
    return rv;
}
开发者ID:Nazi-Nigger,项目名称:gecko-dev,代码行数:13,代码来源:vfyutil.c


示例20: PR_Lock

void
JSBackgroundThread::cancel()
{
    PR_Lock(lock);
    if (shutdown) {
        PR_Unlock(lock);
        return;
    }
    shutdown = true;
    PR_NotifyCondVar(wakeup);
    PR_Unlock(lock);
    PR_JoinThread(thread);
}
开发者ID:JamesLinus,项目名称:nui3,代码行数:13,代码来源:jstask.cpp



注:本文中的PR_NotifyCondVar函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ PR_Open函数代码示例发布时间:2022-05-30
下一篇:
C++ PR_NewTCPSocket函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap