本文整理汇总了C++中Thread::GetThreadStressLog方法的典型用法代码示例。如果您正苦于以下问题:C++ Thread::GetThreadStressLog方法的具体用法?C++ Thread::GetThreadStressLog怎么用?C++ Thread::GetThreadStressLog使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Thread
的用法示例。
在下文中一共展示了Thread::GetThreadStressLog方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DetachCurrentThread
void ThreadStore::DetachCurrentThread()
{
// The thread may not have been initialized because it may never have run managed code before.
Thread * pDetachingThread = RawGetCurrentThread();
// The thread was not initialized yet, so it was not attached
if (!pDetachingThread->IsInitialized())
{
return;
}
if (!PalDetachThread(pDetachingThread))
{
return;
}
#ifdef STRESS_LOG
ThreadStressLog * ptsl = reinterpret_cast<ThreadStressLog *>(
pDetachingThread->GetThreadStressLog());
StressLog::ThreadDetach(ptsl);
#endif // STRESS_LOG
ThreadStore* pTS = GetThreadStore();
ReaderWriterLock::WriteHolder write(&pTS->m_Lock);
ASSERT(rh::std::count(pTS->m_ThreadList.Begin(), pTS->m_ThreadList.End(), pDetachingThread) == 1);
pTS->m_ThreadList.RemoveFirst(pDetachingThread);
pDetachingThread->Destroy();
}
示例2: ReserveStressLogChunks
bool StressLog::ReserveStressLogChunks (unsigned chunksToReserve)
{
Thread *pThread = ThreadStore::GetCurrentThread();
ThreadStressLog* msgs = reinterpret_cast<ThreadStressLog*>(pThread->GetThreadStressLog());
if (msgs == 0)
{
msgs = CreateThreadStressLog(pThread);
if (msgs == 0)
return FALSE;
}
if (chunksToReserve == 0)
{
chunksToReserve = (theLog.MaxSizePerThread + STRESSLOG_CHUNK_SIZE - 1) / STRESSLOG_CHUNK_SIZE;
}
long numTries = (long)chunksToReserve - msgs->chunkListLength;
for (long i = 0; i < numTries; i++)
{
msgs->GrowChunkList ();
}
return msgs->chunkListLength >= (long)chunksToReserve;
}
示例3: DetachCurrentThreadIfHomeFiber
void ThreadStore::DetachCurrentThreadIfHomeFiber()
{
//
// Note: we call this when each *fiber* is destroyed, because we receive that notification outside
// of the Loader Lock. This allows us to safely acquire the ThreadStore lock. However, we have to be
// extra careful to avoid cleaning up a thread unless the fiber being destroyed is the thread's "home"
// fiber, as recorded in AttachCurrentThread.
//
// The thread may not have been initialized because it may never have run managed code before.
Thread * pDetachingThread = RawGetCurrentThread();
ASSERT(_fls_index != FLS_OUT_OF_INDEXES);
Thread* pThreadFromCurrentFiber = (Thread*)PalFlsGetValue(_fls_index);
if (!pDetachingThread->IsInitialized())
{
if (pThreadFromCurrentFiber != NULL)
{
ASSERT_UNCONDITIONALLY("Detaching a fiber from an unknown thread");
RhFailFast();
}
return;
}
if (pThreadFromCurrentFiber == NULL)
{
// we've seen this thread, but not this fiber. It must be a "foreign" fiber that was
// borrowing this thread.
return;
}
if (pThreadFromCurrentFiber != pDetachingThread)
{
ASSERT_UNCONDITIONALLY("Detaching a thread from the wrong fiber");
RhFailFast();
}
#ifdef STRESS_LOG
ThreadStressLog * ptsl = reinterpret_cast<ThreadStressLog *>(
pDetachingThread->GetThreadStressLog());
StressLog::ThreadDetach(ptsl);
#endif // STRESS_LOG
ThreadStore* pTS = GetThreadStore();
ReaderWriterLock::WriteHolder write(&pTS->m_Lock);
ASSERT(rh::std::count(pTS->m_ThreadList.Begin(), pTS->m_ThreadList.End(), pDetachingThread) == 1);
pTS->m_ThreadList.RemoveFirst(pDetachingThread);
pDetachingThread->Destroy();
}
示例4: LogMsg
/* static */
void StressLog::LogMsg (unsigned facility, int cArgs, const char* format, ... )
{
_ASSERTE ( cArgs >= 0 && cArgs <= StressMsg::maxArgCnt );
va_list Args;
va_start(Args, format);
Thread *pThread = ThreadStore::GetCurrentThread();
if (pThread == NULL)
return;
ThreadStressLog* msgs = reinterpret_cast<ThreadStressLog*>(pThread->GetThreadStressLog());
if (msgs == 0) {
msgs = CreateThreadStressLog(pThread);
if (msgs == 0)
return;
}
msgs->LogMsg (facility, cArgs, format, Args);
}