本文整理汇总了C++中PR_NewCondVar函数的典型用法代码示例。如果您正苦于以下问题:C++ PR_NewCondVar函数的具体用法?C++ PR_NewCondVar怎么用?C++ PR_NewCondVar使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PR_NewCondVar函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: defined
nsresult
nsIOThreadPool::Init()
{
#if defined(PR_LOGGING)
if (!gIOThreadPoolLog)
gIOThreadPoolLog = PR_NewLogModule("nsIOThreadPool");
#endif
mNumThreads = 0;
mNumIdleThreads = 0;
mShutdown = PR_FALSE;
mLock = PR_NewLock();
if (!mLock)
return NS_ERROR_OUT_OF_MEMORY;
mIdleThreadCV = PR_NewCondVar(mLock);
if (!mIdleThreadCV)
return NS_ERROR_OUT_OF_MEMORY;
mExitThreadCV = PR_NewCondVar(mLock);
if (!mExitThreadCV)
return NS_ERROR_OUT_OF_MEMORY;
PR_INIT_CLIST(&mEventQ);
// We want to shutdown the i/o thread pool at xpcom-shutdown-threads time.
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (os)
os->AddObserver(this, "xpcom-shutdown-threads", PR_FALSE);
return NS_OK;
}
开发者ID:lofter2011,项目名称:Icefox,代码行数:32,代码来源:nsIOThreadPool.cpp
示例2: launch_thread
SECStatus
launch_thread(GlobalThreadMgr *threadMGR,
startFn *startFunc,
void *a,
int b)
{
perThread *slot;
int i;
if (!threadMGR->threadStartQ) {
threadMGR->threadLock = PR_NewLock();
threadMGR->threadStartQ = PR_NewCondVar(threadMGR->threadLock);
threadMGR->threadEndQ = PR_NewCondVar(threadMGR->threadLock);
}
PR_Lock(threadMGR->threadLock);
while (threadMGR->numRunning >= MAX_THREADS) {
PR_WaitCondVar(threadMGR->threadStartQ, PR_INTERVAL_NO_TIMEOUT);
}
for (i = 0; i < threadMGR->numUsed; ++i) {
slot = &threadMGR->threads[i];
if (slot->running == rs_idle)
break;
}
if (i >= threadMGR->numUsed) {
if (i >= MAX_THREADS) {
/* something's really wrong here. */
PORT_Assert(i < MAX_THREADS);
PR_Unlock(threadMGR->threadLock);
return SECFailure;
}
++(threadMGR->numUsed);
PORT_Assert(threadMGR->numUsed == i + 1);
slot = &threadMGR->threads[i];
}
slot->a = a;
slot->b = b;
slot->startFunc = startFunc;
threadMGR->index = i;
slot->prThread = PR_CreateThread(PR_USER_THREAD,
thread_wrapper, threadMGR,
PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD,
PR_JOINABLE_THREAD, 0);
if (slot->prThread == NULL) {
PR_Unlock(threadMGR->threadLock);
printf("Failed to launch thread!\n");
return SECFailure;
}
slot->inUse = 1;
slot->running = 1;
++(threadMGR->numRunning);
PR_Unlock(threadMGR->threadLock);
return SECSuccess;
}
开发者ID:Nazi-Nigger,项目名称:gecko-dev,代码行数:59,代码来源:vfyutil.c
示例3: alloc_threadpool
static PRThreadPool *
alloc_threadpool(void)
{
PRThreadPool *tp;
tp = (PRThreadPool *) PR_CALLOC(sizeof(*tp));
if (NULL == tp)
goto failed;
tp->jobq.lock = PR_NewLock();
if (NULL == tp->jobq.lock)
goto failed;
tp->jobq.cv = PR_NewCondVar(tp->jobq.lock);
if (NULL == tp->jobq.cv)
goto failed;
tp->join_lock = PR_NewLock();
if (NULL == tp->join_lock)
goto failed;
#ifdef OPT_WINNT
tp->jobq.nt_completion_port = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
NULL, 0, 0);
if (NULL == tp->jobq.nt_completion_port)
goto failed;
#endif
tp->ioq.lock = PR_NewLock();
if (NULL == tp->ioq.lock)
goto failed;
/* Timer queue */
tp->timerq.lock = PR_NewLock();
if (NULL == tp->timerq.lock)
goto failed;
tp->timerq.cv = PR_NewCondVar(tp->timerq.lock);
if (NULL == tp->timerq.cv)
goto failed;
tp->shutdown_cv = PR_NewCondVar(tp->jobq.lock);
if (NULL == tp->shutdown_cv)
goto failed;
tp->ioq.notify_fd = PR_NewPollableEvent();
if (NULL == tp->ioq.notify_fd)
goto failed;
return tp;
failed:
delete_threadpool(tp);
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
return NULL;
}
开发者ID:Akesure,项目名称:jxcore,代码行数:49,代码来源:prtpool.c
示例4: mCondVar
CondVarNSPR::CondVarNSPR(MutexNSPR* mutex)
: mCondVar(NULL)
, mCondMutex(NULL)
{
// If the caller did not specify a mutex variable to use with
// the condition variable, use mDefaultMutex.
if ( mutex == NULL )
{
mCondMutex = &mDefaultMutex;
}
else
{
mCondMutex = mutex;
}
// Initialize the condition variable.
mCondVar = PR_NewCondVar(mCondMutex->mMutex);
if ( NULL == mCondVar )
{
std::ostringstream msg_stream;
NSPR_PrintError("Condition variable allocation failed: ", msg_stream);
throw vpr::ResourceException(msg_stream.str(), VPR_LOCATION);
}
}
开发者ID:flair2005,项目名称:vrjuggler,代码行数:25,代码来源:CondVarNSPR.cpp
示例5: _PR_InitIO
void _PR_InitIO(void)
{
const PRIOMethods *methods = PR_GetFileMethods();
_PR_InitFdCache();
_pr_flock_lock = PR_NewLock();
_pr_flock_cv = PR_NewCondVar(_pr_flock_lock);
#ifdef WIN32
_pr_stdin = PR_AllocFileDesc((PROsfd)GetStdHandle(STD_INPUT_HANDLE),
methods);
_pr_stdout = PR_AllocFileDesc((PROsfd)GetStdHandle(STD_OUTPUT_HANDLE),
methods);
_pr_stderr = PR_AllocFileDesc((PROsfd)GetStdHandle(STD_ERROR_HANDLE),
methods);
#ifdef WINNT
_pr_stdin->secret->md.sync_file_io = PR_TRUE;
_pr_stdout->secret->md.sync_file_io = PR_TRUE;
_pr_stderr->secret->md.sync_file_io = PR_TRUE;
#endif
#else
_pr_stdin = PR_AllocFileDesc(0, methods);
_pr_stdout = PR_AllocFileDesc(1, methods);
_pr_stderr = PR_AllocFileDesc(2, methods);
#endif
_PR_MD_INIT_FD_INHERITABLE(_pr_stdin, PR_TRUE);
_PR_MD_INIT_FD_INHERITABLE(_pr_stdout, PR_TRUE);
_PR_MD_INIT_FD_INHERITABLE(_pr_stderr, PR_TRUE);
_PR_MD_INIT_IO();
}
开发者ID:AbrahamJewowich,项目名称:FreeSWITCH,代码行数:32,代码来源:prio.c
示例6: PR_IMPLEMENT
PR_IMPLEMENT(PRSemaphore*) PR_NewSem(PRUintn value)
{
PRSemaphore *semaphore;
static PRBool unwarned = PR_TRUE;
if (!_pr_initialized) _PR_ImplicitInitialization();
if (unwarned) unwarned = _PR_Obsolete(
"PR_NewSem", "locks & condition variables");
semaphore = PR_NEWZAP(PRSemaphore);
if (NULL != semaphore)
{
PRLock *lock = PR_NewLock();
if (NULL != lock)
{
semaphore->cvar = PR_NewCondVar(lock);
if (NULL != semaphore->cvar)
{
semaphore->count = value;
return semaphore;
}
PR_DestroyLock(lock);
}
PR_Free(semaphore);
}
return NULL;
}
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:27,代码来源:ptsynch.c
示例7: ConditionTimeout
static PRIntervalTime ConditionTimeout(PRUint32 loops)
{
PRUintn count;
PRIntervalTime overhead, timein = PR_IntervalNow();
PRLock *ml = PR_NewLock();
PRCondVar *cv = PR_NewCondVar(ml);
PRIntervalTime interval = PR_MillisecondsToInterval(50);
overhead = PR_IntervalNow() - timein;
PR_Lock(ml);
for (count = 0; count < loops; ++count)
{
overhead += interval;
PR_ASSERT(PR_WaitCondVar(cv, interval) == PR_SUCCESS);
}
PR_Unlock(ml);
timein = PR_IntervalNow();
PR_DestroyCondVar(cv);
PR_DestroyLock(ml);
overhead += (PR_IntervalNow() - timein);
return overhead;
} /* ConditionTimeout */
开发者ID:AbrahamJewowich,项目名称:FreeSWITCH,代码行数:26,代码来源:alarm.c
示例8: alloc_job
static PRJob *
alloc_job(PRBool joinable, PRThreadPool *tp)
{
PRJob *jobp;
jobp = PR_NEWZAP(PRJob);
if (NULL == jobp)
goto failed;
if (joinable) {
jobp->join_cv = PR_NewCondVar(tp->join_lock);
jobp->join_wait = PR_TRUE;
if (NULL == jobp->join_cv)
goto failed;
} else {
jobp->join_cv = NULL;
}
#ifdef OPT_WINNT
jobp->nt_notifier.jobp = jobp;
#endif
return jobp;
failed:
delete_job(jobp);
PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
return NULL;
}
开发者ID:Akesure,项目名称:jxcore,代码行数:25,代码来源:prtpool.c
示例9: PR_NewLock
LdapSessionPool::LdapSessionPool(LdapServerSet *servers, unsigned short limit,
dyngroupmode_t dyngroupmode)
{
authmethod=NULL;
certNickName=NULL;
_maxSessions = (limit < 1 ? 1 : limit);
_dyngroupmode = dyngroupmode;
//_servers = servers;
_waiters = 0;
_lock = PR_NewLock();
assert(_lock);
_cvar = PR_NewCondVar(_lock);
assert(_cvar);
// add new pool to list of all pools
if (_poolListLock == NULL) {
static PRCallOnceType once = { 0, 0, (PRStatus)0 };
PR_CallOnce(&once, PoolListCreate);
}
PR_Lock(_poolListLock);
_nextPool = _poolList;
_poolList = this;
PR_Unlock(_poolListLock);
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:25,代码来源:LdapSessionPool.cpp
示例10: NS_ENSURE_TRUE
nsresult PeerConnectionCtx::Initialize() {
mCCM = CSF::CallControlManager::create();
NS_ENSURE_TRUE(mCCM.get(), NS_ERROR_FAILURE);
// Add the local audio codecs
// FIX - Get this list from MediaEngine instead
int codecMask = 0;
codecMask |= VCM_CODEC_RESOURCE_G711;
codecMask |= VCM_CODEC_RESOURCE_OPUS;
//codecMask |= VCM_CODEC_RESOURCE_LINEAR;
//codecMask |= VCM_CODEC_RESOURCE_G722;
//codecMask |= VCM_CODEC_RESOURCE_iLBC;
//codecMask |= VCM_CODEC_RESOURCE_iSAC;
mCCM->setAudioCodecs(codecMask);
//Add the local video codecs
// FIX - Get this list from MediaEngine instead
// Turning them all on for now
codecMask = 0;
// Only adding codecs supported
//codecMask |= VCM_CODEC_RESOURCE_H263;
//codecMask |= VCM_CODEC_RESOURCE_H264;
codecMask |= VCM_CODEC_RESOURCE_VP8;
//codecMask |= VCM_CODEC_RESOURCE_I420;
mCCM->setVideoCodecs(codecMask);
ccAppReadyToStartLock = PR_NewLock();
if (!ccAppReadyToStartLock) {
return NS_ERROR_FAILURE;
}
ccAppReadyToStartCond = PR_NewCondVar(ccAppReadyToStartLock);
if (!ccAppReadyToStartCond) {
return NS_ERROR_FAILURE;
}
if (!mCCM->startSDPMode())
return NS_ERROR_FAILURE;
mDevice = mCCM->getActiveDevice();
mCCM->addCCObserver(this);
NS_ENSURE_TRUE(mDevice.get(), NS_ERROR_FAILURE);
ChangeSipccState(mozilla::dom::PCImplSipccState::Starting);
// Now that everything is set up, we let the CCApp thread
// know that it's okay to start processing messages.
PR_Lock(ccAppReadyToStartLock);
ccAppReadyToStart = 1;
PR_NotifyAllCondVar(ccAppReadyToStartCond);
PR_Unlock(ccAppReadyToStartLock);
mConnectionCounter = 0;
#ifdef MOZILLA_INTERNAL_API
Telemetry::GetHistogramById(Telemetry::WEBRTC_CALL_COUNT)->Add(0);
#endif
return NS_OK;
}
开发者ID:jonathanmarvens,项目名称:mozilla-central,代码行数:60,代码来源:PeerConnectionCtx.cpp
示例11: common
void DNSSession :: common(PRIntervalTime tm)
{
starttime = PR_IntervalNow();
timeout = tm;
timedout = PR_FALSE;
sendfailed = PR_FALSE;
id = 0;
lock = PR_NewLock();
PR_ASSERT(lock);
cvar = PR_NewCondVar(lock);
PR_ASSERT(cvar);
status = DNS_INIT;
awake = PR_FALSE;
// query stuff
re_retries = _res.retry;
re_sends = 1;
re_resend = 1;
re_he.h_addr_list[0] = 0;
re_data = NULL;
re_sent = 0;
re_srch = 0;
re_type = 0;
memset(re_name, 0, sizeof(re_name));
memset((void*)&re_he, 0, sizeof(re_he));
memset((void*)&ar_host, 0, sizeof(ar_host));
}
开发者ID:OldsSourcesBackups,项目名称:Heliod-Web-Server,代码行数:28,代码来源:arlib.cpp
示例12: PR_IMPLEMENT
/*
** Create a new semaphore.
*/
PR_IMPLEMENT(PRSemaphore*) PR_NewSem(PRUintn value)
{
PRSemaphore *sem;
PRCondVar *cvar;
PRLock *lock;
sem = PR_NEWZAP(PRSemaphore);
if (sem) {
#ifdef HAVE_CVAR_BUILT_ON_SEM
_PR_MD_NEW_SEM(&sem->md, value);
#else
lock = PR_NewLock();
if (!lock) {
PR_DELETE(sem);
return NULL;
}
cvar = PR_NewCondVar(lock);
if (!cvar) {
PR_DestroyLock(lock);
PR_DELETE(sem);
return NULL;
}
sem->cvar = cvar;
sem->count = value;
#endif
}
return sem;
}
开发者ID:Akesure,项目名称:jxcore,代码行数:32,代码来源:prsem.c
示例13: forked
static void PR_CALLBACK forked(void *arg)
{
PRIntn i;
PRLock *ml;
PRCondVar *cv;
PR_LogPrint("%s logging creating mutex\n", (const char*)arg);
ml = PR_NewLock();
PR_LogPrint("%s logging creating condition variable\n", (const char*)arg);
cv = PR_NewCondVar(ml);
PR_LogPrint("%s waiting on condition timeout 10 times\n", (const char*)arg);
for (i = 0; i < 10; ++i)
{
PR_Lock(ml);
PR_WaitCondVar(cv, PR_SecondsToInterval(1));
PR_Unlock(ml);
}
PR_LogPrint("%s logging destroying condition variable\n", (const char*)arg);
PR_DestroyCondVar(cv);
PR_LogPrint("%s logging destroying mutex\n", (const char*)arg);
PR_DestroyLock(ml);
PR_LogPrint("%s forked thread exiting\n", (const char*)arg);
}
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.external,代码行数:25,代码来源:logger.c
示例14: PR_IMPLEMENT
/*
** Create a new monitor.
*/
PR_IMPLEMENT(PRMonitor*) PR_NewMonitor()
{
PRMonitor *mon;
PRCondVar *cvar;
PRLock *lock;
mon = PR_NEWZAP(PRMonitor);
if (mon) {
lock = PR_NewLock();
if (!lock) {
PR_DELETE(mon);
return 0;
}
cvar = PR_NewCondVar(lock);
if (!cvar) {
PR_DestroyLock(lock);
PR_DELETE(mon);
return 0;
}
mon->cvar = cvar;
mon->name = NULL;
}
return mon;
}
开发者ID:Akin-Net,项目名称:mozilla-central,代码行数:28,代码来源:prmon.c
示例15: TestIntervals
static void TestIntervals(void)
{
PRStatus rv;
PRUint32 delta;
PRInt32 seconds;
PRUint64 elapsed, thousand;
PRTime timein, timeout;
PRLock *ml = PR_NewLock();
PRCondVar *cv = PR_NewCondVar(ml);
for (seconds = 0; seconds < 10; ++seconds)
{
PRIntervalTime ticks = PR_SecondsToInterval(seconds);
PR_Lock(ml);
timein = PR_Now();
rv = PR_WaitCondVar(cv, ticks);
timeout = PR_Now();
PR_Unlock(ml);
LL_SUB(elapsed, timeout, timein);
LL_I2L(thousand, 1000);
LL_DIV(elapsed, elapsed, thousand);
LL_L2UI(delta, elapsed);
if (debug_mode) PR_fprintf(output,
"TestIntervals: %swaiting %ld seconds took %ld msecs\n",
((rv == PR_SUCCESS) ? "" : "FAILED "), seconds, delta);
}
PR_DestroyCondVar(cv);
PR_DestroyLock(ml);
if (debug_mode) PR_fprintf(output, "\n");
} /* TestIntervals */
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.external,代码行数:29,代码来源:inrval.c
示例16: T1Lock
static void T1Lock(void)
{
PRStatus rv;
PRThread *t2, *t3;
sharedL.o1 = PR_NewLock();
sharedL.o2 = PR_NewLock();
sharedL.cv1 = PR_NewCondVar(sharedL.o1);
sharedL.cv2 = PR_NewCondVar(sharedL.o2);
PR_fprintf(err, "\n**********************************\n");
PR_fprintf(err, " LOCKS\n");
PR_fprintf(err, "**********************************\n");
base = PR_IntervalNow();
PR_Lock(sharedL.o1);
LogNow("T1 waiting 3 seconds on o1", PR_SUCCESS);
rv = PR_WaitCondVar(sharedL.cv1, PR_SecondsToInterval(3));
if (PR_SUCCESS == rv) LogNow("T1 resuming on o1", rv);
else LogNow("T1 wait on o1 failed", rv);
PR_Unlock(sharedL.o1);
LogNow("T1 creating T2", PR_SUCCESS);
t2 = PR_CreateThread(
PR_USER_THREAD, T2Lock, &sharedL, PR_PRIORITY_NORMAL,
PR_LOCAL_THREAD, PR_JOINABLE_THREAD, 0);
LogNow("T1 creating T3", PR_SUCCESS);
t3 = PR_CreateThread(
PR_USER_THREAD, T3Lock, &sharedL, PR_PRIORITY_NORMAL,
PR_LOCAL_THREAD, PR_JOINABLE_THREAD, 0);
PR_Lock(sharedL.o2);
LogNow("T1 waiting forever on o2", PR_SUCCESS);
rv = PR_WaitCondVar(sharedL.cv2, PR_INTERVAL_NO_TIMEOUT);
if (PR_SUCCESS == rv) LogNow("T1 resuming on o2", rv);
else LogNow("T1 wait on o2 failed", rv);
PR_Unlock(sharedL.o2);
(void)PR_JoinThread(t2);
(void)PR_JoinThread(t3);
PR_DestroyLock(sharedL.o1);
PR_DestroyLock(sharedL.o2);
PR_DestroyCondVar(sharedL.cv1);
PR_DestroyCondVar(sharedL.cv2);
} /* T1Lock */
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.external,代码行数:47,代码来源:xnotify.c
示例17: WaitCondVarThread
static void WaitCondVarThread(void *arg)
{
PRIntervalTime timeout = (PRIntervalTime) arg;
PRIntervalTime elapsed;
#if defined(XP_UNIX) || defined(WIN32)
PRInt32 timeout_msecs = PR_IntervalToMilliseconds(timeout);
PRInt32 elapsed_msecs;
#endif
#if defined(XP_UNIX)
struct timeval end_time_tv;
#endif
#if defined(WIN32)
struct _timeb end_time_tb;
#endif
PRLock *ml;
PRCondVar *cv;
ml = PR_NewLock();
if (ml == NULL) {
fprintf(stderr, "PR_NewLock failed\n");
exit(1);
}
cv = PR_NewCondVar(ml);
if (cv == NULL) {
fprintf(stderr, "PR_NewCondVar failed\n");
exit(1);
}
PR_Lock(ml);
PR_WaitCondVar(cv, timeout);
PR_Unlock(ml);
elapsed = (PRIntervalTime)(PR_IntervalNow() - start_time);
if (elapsed + tolerance < timeout || elapsed > timeout + tolerance) {
fprintf(stderr, "timeout wrong\n");
exit(1);
}
#if defined(XP_UNIX)
gettimeofday(&end_time_tv, NULL);
elapsed_msecs = 1000*(end_time_tv.tv_sec - start_time_tv.tv_sec)
+ (end_time_tv.tv_usec - start_time_tv.tv_usec)/1000;
#endif
#if defined(WIN32)
_ftime(&end_time_tb);
elapsed_msecs = 1000*(end_time_tb.time - start_time_tb.time)
+ (end_time_tb.millitm - start_time_tb.millitm);
#endif
#if defined(XP_UNIX) || defined(WIN32)
if (elapsed_msecs + tolerance_msecs < timeout_msecs
|| elapsed_msecs > timeout_msecs + tolerance_msecs) {
fprintf(stderr, "timeout wrong\n");
exit(1);
}
#endif
PR_DestroyCondVar(cv);
PR_DestroyLock(ml);
if (debug_mode) {
fprintf(stderr, "wait cond var thread (scope %d) done\n",
PR_GetThreadScope(PR_GetCurrentThread()));
}
}
开发者ID:AbrahamJewowich,项目名称:FreeSWITCH,代码行数:59,代码来源:y2ktmo.c
示例18: lockedVars_Init
void
lockedVars_Init( lockedVars * lv)
{
lv->count = 0;
lv->waiters = 0;
lv->lock = PR_NewLock();
lv->condVar = PR_NewCondVar(lv->lock);
}
开发者ID:Nazi-Nigger,项目名称:gecko-dev,代码行数:8,代码来源:vfyutil.c
示例19: referint_postop_start
int referint_postop_start( Slapi_PBlock *pb)
{
char **argv;
int argc = 0;
/* get args */
if ( slapi_pblock_get( pb, SLAPI_PLUGIN_ARGC, &argc ) != 0 ) {
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
"referint_postop failed to get argv\n" );
return( -1 );
}
if ( slapi_pblock_get( pb, SLAPI_PLUGIN_ARGV, &argv ) != 0 ) {
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
"referint_postop failed to get argv\n" );
return( -1 );
}
if(argv == NULL){
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
"args were null in referint_postop_start\n" );
return( -1 );
}
/*
* Only bother to start the thread if you are in delay mode.
* 0 = no delay,
* -1 = integrity off
*/
if (argc >= 1) {
if(atoi(argv[0]) > 0){
/* initialize the cv and lock */
if (!use_txn && (NULL == referint_mutex)) {
referint_mutex = PR_NewLock();
}
keeprunning_mutex = PR_NewLock();
keeprunning_cv = PR_NewCondVar(keeprunning_mutex);
keeprunning =1;
referint_tid = PR_CreateThread (PR_USER_THREAD,
referint_thread_func,
(void *)argv,
PR_PRIORITY_NORMAL,
PR_GLOBAL_THREAD,
PR_UNJOINABLE_THREAD,
SLAPD_DEFAULT_THREAD_STACKSIZE);
if ( referint_tid == NULL ) {
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
"referint_postop_start PR_CreateThread failed\n" );
exit( 1 );
}
}
} else {
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
"referint_postop_start insufficient arguments supplied\n" );
return( -1 );
}
refint_started = 1;
return(0);
}
开发者ID:ohamada,项目名称:389ds,代码行数:58,代码来源:referint.c
示例20: TimerInit
static PRStatus TimerInit(void)
{
tm_vars.ml = PR_NewLock();
if (NULL == tm_vars.ml)
{
goto failed;
}
tm_vars.new_timer = PR_NewCondVar(tm_vars.ml);
if (NULL == tm_vars.new_timer)
{
goto failed;
}
tm_vars.cancel_timer = PR_NewCondVar(tm_vars.ml);
if (NULL == tm_vars.cancel_timer)
{
goto failed;
}
PR_INIT_CLIST(&tm_vars.timer_queue);
tm_vars.manager_thread = PR_CreateThread(
PR_SYSTEM_THREAD, TimerManager, NULL, PR_PRIORITY_NORMAL,
PR_LOCAL_THREAD, PR_UNJOINABLE_THREAD, 0);
if (NULL == tm_vars.manager_thread)
{
goto failed;
}
return PR_SUCCESS;
failed:
if (NULL != tm_vars.cancel_timer)
{
PR_DestroyCondVar(tm_vars.cancel_timer);
}
if (NULL != tm_vars.new_timer)
{
PR_DestroyCondVar(tm_vars.new_timer);
}
if (NULL != tm_vars.ml)
{
PR_DestroyLock(tm_vars.ml);
}
return PR_FAILURE;
}
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:42,代码来源:prmwait.c
注:本文中的PR_NewCondVar函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论