本文整理汇总了C++中SharedMemoryProcessDataHeader类的典型用法代码示例。如果您正苦于以下问题:C++ SharedMemoryProcessDataHeader类的具体用法?C++ SharedMemoryProcessDataHeader怎么用?C++ SharedMemoryProcessDataHeader使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SharedMemoryProcessDataHeader类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _ASSERTE
void SharedMemoryManager::RemoveProcessDataHeader(SharedMemoryProcessDataHeader *processDataHeader)
{
_ASSERTE(processDataHeader != nullptr);
_ASSERTE(IsCreationDeletionProcessLockAcquired());
if (s_processDataHeaderListHead == processDataHeader)
{
s_processDataHeaderListHead = processDataHeader->GetNextInProcessDataHeaderList();
processDataHeader->SetNextInProcessDataHeaderList(nullptr);
return;
}
for (SharedMemoryProcessDataHeader
*previous = s_processDataHeaderListHead,
*current = previous->GetNextInProcessDataHeaderList();
current != nullptr;
previous = current, current = current->GetNextInProcessDataHeaderList())
{
if (current == processDataHeader)
{
previous->SetNextInProcessDataHeaderList(current->GetNextInProcessDataHeaderList());
current->SetNextInProcessDataHeaderList(nullptr);
return;
}
}
_ASSERTE(false);
}
示例2: AddProcessDataHeader
void SharedMemoryManager::AddProcessDataHeader(SharedMemoryProcessDataHeader *processDataHeader)
{
_ASSERTE(processDataHeader != nullptr);
_ASSERTE(IsCreationDeletionProcessLockAcquired());
_ASSERTE(processDataHeader->GetNextInProcessDataHeaderList() == nullptr);
_ASSERTE(FindProcessDataHeader(processDataHeader->GetId()) == nullptr);
processDataHeader->SetNextInProcessDataHeaderList(s_processDataHeaderListHead);
s_processDataHeaderListHead = processDataHeader;
}
示例3: AcquireCreationDeletionProcessLock
void SharedMemoryManager::StaticClose()
{
// This function could very well be running during abrupt shutdown, and there could still be user threads running.
// Synchronize the deletion, and don't remove or delete items in the linked list.
AcquireCreationDeletionProcessLock();
for (SharedMemoryProcessDataHeader *current = s_processDataHeaderListHead;
current != nullptr;
current = current->GetNextInProcessDataHeaderList())
{
current->Close();
}
ReleaseCreationDeletionProcessLock();
// This function could very well be running during abrupt shutdown, and there could still be user threads running. Don't
// delete the creation/deletion process lock, the process is shutting down anyway.
}
示例4: ERROR
DWORD CorUnix::InternalWaitForMultipleObjectsEx(
CPalThread * pThread,
DWORD nCount,
CONST HANDLE *lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds,
BOOL bAlertable)
{
DWORD dwRet = WAIT_FAILED;
PAL_ERROR palErr = NO_ERROR;
int i, iSignaledObjCount, iSignaledObjIndex = -1;
bool fWAll = (bool)bWaitAll, fNeedToBlock = false;
bool fAbandoned = false;
WaitType wtWaitType;
IPalObject * pIPalObjStackArray[MAXIMUM_STACK_WAITOBJ_ARRAY_SIZE] = { NULL };
ISynchWaitController * pISyncStackArray[MAXIMUM_STACK_WAITOBJ_ARRAY_SIZE] = { NULL };
IPalObject ** ppIPalObjs = pIPalObjStackArray;
ISynchWaitController ** ppISyncWaitCtrlrs = pISyncStackArray;
if ((nCount == 0) || (nCount > MAXIMUM_WAIT_OBJECTS))
{
ppIPalObjs = NULL; // make delete at the end safe
ppISyncWaitCtrlrs = NULL; // make delete at the end safe
ERROR("Invalid object count=%d [range: 1 to %d]\n",
nCount, MAXIMUM_WAIT_OBJECTS)
pThread->SetLastError(ERROR_INVALID_PARAMETER);
goto WFMOExIntExit;
}
else if (nCount == 1)
{
fWAll = false; // makes no difference when nCount is 1
wtWaitType = SingleObject;
}
else
{
wtWaitType = fWAll ? MultipleObjectsWaitAll : MultipleObjectsWaitOne;
if (nCount > MAXIMUM_STACK_WAITOBJ_ARRAY_SIZE)
{
ppIPalObjs = InternalNewArray<IPalObject*>(nCount);
ppISyncWaitCtrlrs = InternalNewArray<ISynchWaitController*>(nCount);
if ((NULL == ppIPalObjs) || (NULL == ppISyncWaitCtrlrs))
{
ERROR("Out of memory allocating internal structures\n");
pThread->SetLastError(ERROR_NOT_ENOUGH_MEMORY);
goto WFMOExIntExit;
}
}
}
palErr = g_pObjectManager->ReferenceMultipleObjectsByHandleArray(pThread,
(VOID **)lpHandles,
nCount,
&sg_aotWaitObject,
SYNCHRONIZE,
ppIPalObjs);
if (NO_ERROR != palErr)
{
ERROR("Unable to obtain object for some or all of the handles [error=%u]\n",
palErr);
if (palErr == ERROR_INVALID_HANDLE)
pThread->SetLastError(ERROR_INVALID_HANDLE);
else
pThread->SetLastError(ERROR_INTERNAL_ERROR);
goto WFMOExIntExit;
}
if (nCount > 1)
{
// Check for any cross-process sync objects. "Wait for any" and "wait for all" operations are not supported on
// cross-process sync objects in the PAL.
for (DWORD i = 0; i < nCount; ++i)
{
if (ppIPalObjs[i]->GetObjectType()->GetId() == otiNamedMutex)
{
ERROR("Attempt to wait for any or all handles including a cross-process sync object", ERROR_NOT_SUPPORTED);
pThread->SetLastError(ERROR_NOT_SUPPORTED);
goto WFMOExIntCleanup;
}
}
}
else if (ppIPalObjs[0]->GetObjectType()->GetId() == otiNamedMutex)
{
SharedMemoryProcessDataHeader *processDataHeader =
SharedMemoryProcessDataHeader::PalObject_GetProcessDataHeader(ppIPalObjs[0]);
_ASSERTE(processDataHeader != nullptr);
try
{
MutexTryAcquireLockResult tryAcquireLockResult =
static_cast<NamedMutexProcessData *>(processDataHeader->GetData())->TryAcquireLock(dwMilliseconds);
switch (tryAcquireLockResult)
{
case MutexTryAcquireLockResult::AcquiredLock:
dwRet = WAIT_OBJECT_0;
break;
case MutexTryAcquireLockResult::AcquiredLockButMutexWasAbandoned:
dwRet = WAIT_ABANDONED_0;
break;
//.........这里部分代码省略.........
示例5: _ASSERTE
PAL_ERROR
CorUnix::InternalReleaseMutex(
CPalThread *pthr,
HANDLE hMutex
)
{
PAL_ERROR palError = NO_ERROR;
IPalObject *pobjMutex = NULL;
ISynchStateController *pssc = NULL;
PalObjectTypeId objectTypeId;
_ASSERTE(NULL != pthr);
ENTRY("InternalReleaseMutex(pthr=%p, hMutex=%p)\n",
pthr,
hMutex
);
palError = g_pObjectManager->ReferenceObjectByHandle(
pthr,
hMutex,
&aotAnyMutex,
0, // should be MUTEX_MODIFY_STATE -- current ignored (no Win32 security)
&pobjMutex
);
if (NO_ERROR != palError)
{
ERROR("Unable to obtain object for handle %p (error %d)!\n", hMutex, palError);
goto InternalReleaseMutexExit;
}
objectTypeId = pobjMutex->GetObjectType()->GetId();
if (objectTypeId == otiMutex)
{
palError = pobjMutex->GetSynchStateController(
pthr,
&pssc
);
if (NO_ERROR != palError)
{
ASSERT("Error %d obtaining synch state controller\n", palError);
goto InternalReleaseMutexExit;
}
palError = pssc->DecrementOwnershipCount();
if (NO_ERROR != palError)
{
ERROR("Error %d decrementing mutex ownership count\n", palError);
goto InternalReleaseMutexExit;
}
}
else
{
_ASSERTE(objectTypeId == otiNamedMutex);
SharedMemoryProcessDataHeader *processDataHeader =
SharedMemoryProcessDataHeader::PalObject_GetProcessDataHeader(pobjMutex);
_ASSERTE(processDataHeader != nullptr);
try
{
static_cast<NamedMutexProcessData *>(processDataHeader->GetData())->ReleaseLock();
}
catch (SharedMemoryException ex)
{
palError = ex.GetErrorCode();
goto InternalReleaseMutexExit;
}
}
InternalReleaseMutexExit:
if (NULL != pssc)
{
pssc->ReleaseController();
}
if (NULL != pobjMutex)
{
pobjMutex->ReleaseReference(pthr);
}
LOGEXIT("InternalReleaseMutex returns %i\n", palError);
return palError;
}
示例6: unlink
~AutoCleanup()
{
#if !NAMED_MUTEX_USE_PTHREAD_MUTEX
if (!m_cancel)
{
if (m_lockFileDescriptor != -1)
{
SharedMemoryHelpers::CloseFile(m_lockFileDescriptor);
}
if (m_createdLockFile)
{
_ASSERTE(m_lockFilePath != nullptr);
unlink(m_lockFilePath);
}
if (m_sessionDirectoryPathCharCount != 0)
{
_ASSERTE(m_lockFilePath != nullptr);
m_lockFilePath[m_sessionDirectoryPathCharCount] = '\0';
rmdir(m_lockFilePath);
}
}
#endif // !NAMED_MUTEX_USE_PTHREAD_MUTEX
if (m_acquiredCreationDeletionFileLock)
{
SharedMemoryManager::ReleaseCreationDeletionFileLock();
}
if (!m_cancel && m_processDataHeader != nullptr)
{
_ASSERTE(m_acquiredCreationDeletionProcessLock);
m_processDataHeader->DecRefCount();
}
if (m_acquiredCreationDeletionProcessLock)
{
SharedMemoryManager::ReleaseCreationDeletionProcessLock();
}
}