本文整理汇总了C++中DosReleaseMutexSem函数的典型用法代码示例。如果您正苦于以下问题:C++ DosReleaseMutexSem函数的具体用法?C++ DosReleaseMutexSem怎么用?C++ DosReleaseMutexSem使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DosReleaseMutexSem函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dump_buffer
static void dump_buffer (int i)
{
static int index = 0;
void *b;
b = buffer;
if (index + i > bsize) {
do {
DosRequestMutexSem (mutex, SEM_INDEFINITE_WAIT);
if (ready != 0) {
DosReleaseMutexSem(mutex);
break;
}
DosReleaseMutexSem (mutex);
DosSleep (20);
} while (TRUE);
MixBuffers[next].ulBufferLength = index;
MixSetupParms.pmixWrite (MixSetupParms.ulMixHandle,
&(MixBuffers[next]),1);
ready--;
next++;
index = 0;
if (next == BUFFERCOUNT) {
next=0;
}
}
memcpy (&((char*)MixBuffers[next].pBuffer)[index], b, i);
index += i;
}
示例2: vlc_sem_wait
void vlc_sem_wait (vlc_sem_t *sem)
{
ULONG rc;
do
{
vlc_testcancel ();
DosRequestMutexSem(sem->wait_mutex, SEM_INDEFINITE_WAIT);
rc = vlc_WaitForSingleObject (sem->hev, SEM_INDEFINITE_WAIT );
if (!rc)
{
DosRequestMutexSem(sem->count_mutex, SEM_INDEFINITE_WAIT);
sem->count--;
if (sem->count == 0)
{
ULONG ulPost;
DosResetEventSem(sem->hev, &ulPost);
}
DosReleaseMutexSem(sem->count_mutex);
}
DosReleaseMutexSem(sem->wait_mutex);
} while (rc == ERROR_INTERRUPT);
}
示例3: thread_cond_timedwait
static apr_status_t thread_cond_timedwait(apr_thread_cond_t *cond,
apr_thread_mutex_t *mutex,
ULONG timeout_ms )
{
ULONG rc;
apr_status_t rv = APR_SUCCESS;
int wake = FALSE;
unsigned long generation;
DosRequestMutexSem(cond->mutex, SEM_INDEFINITE_WAIT);
cond->num_waiting++;
generation = cond->generation;
DosReleaseMutexSem(cond->mutex);
apr_thread_mutex_unlock(mutex);
do {
rc = DosWaitEventSem(cond->semaphore, timeout_ms);
DosRequestMutexSem(cond->mutex, SEM_INDEFINITE_WAIT);
if (cond->num_wake) {
if (cond->generation != generation) {
cond->num_wake--;
cond->num_waiting--;
rv = APR_SUCCESS;
break;
} else {
wake = TRUE;
}
}
else if (rc != 0) {
cond->num_waiting--;
rv = APR_TIMEUP;
break;
}
DosReleaseMutexSem(cond->mutex);
if (wake) {
wake = FALSE;
DosPostEventSem(cond->semaphore);
}
} while (1);
DosReleaseMutexSem(cond->mutex);
apr_thread_mutex_lock(mutex);
return rv;
}
示例4: CreatePluginList
WaWEPluginList_p CreatePluginList(int iPluginType)
{
WaWEPluginList_p pResult = NULL;
WaWEPluginList_p pLast = NULL;
WaWEPluginList_p pNew;
WaWEPlugin_p temp;
if (DosRequestMutexSem(PluginListProtector_Sem, SEM_INDEFINITE_WAIT)==NO_ERROR)
{
temp = PluginListHead;
while (temp)
{
if (temp->iPluginType == iPluginType)
{
pNew = (WaWEPluginList_p) dbg_malloc(sizeof(WaWEPluginList_t));
if (pNew)
{
pNew->pNext = NULL;
pNew->pPlugin = temp;
if (!pResult)
{
pResult = pNew;
} else
{
pLast->pNext = pNew;
}
pLast = pNew;
}
}
temp = temp->pNext;
}
DosReleaseMutexSem(PluginListProtector_Sem);
}
return pResult;
}
示例5: GetExportPluginForFormat
WaWEPlugin_p GetExportPluginForFormat(WaWEExP_Create_Desc_p pFormatDesc)
{
WaWEPlugin_p pResult = NULL;
WaWEPlugin_p temp = NULL;
int iImportance;
if (DosRequestMutexSem(PluginListProtector_Sem, SEM_INDEFINITE_WAIT)==NO_ERROR)
{
// Go through all plugins, in order of importance,
// and check them if they can open the file.
// Return the first one, which reports success!
for (iImportance = WAWE_PLUGIN_IMPORTANCE_MAX;
iImportance >= WAWE_PLUGIN_IMPORTANCE_MIN;
iImportance--)
{
temp = PluginListHead;
while ((temp) && (!pResult))
{
if ((temp->iPluginType == WAWE_PLUGIN_TYPE_EXPORT) &&
(temp->iPluginImportance == iImportance))
{
if (temp->TypeSpecificInfo.ExportPluginInfo.fnIsFormatSupported(pFormatDesc))
{
// Hey, found a plugin which can write in this format!
pResult = temp;
}
}
temp = temp->pNext;
}
if (pResult) break;
}
DosReleaseMutexSem(PluginListProtector_Sem);
}
return pResult;
}
示例6: GetClipText
int GetClipText(ClipData *cd) {
int rc;
ULONG PostCount;
char *mem;
rc = DosOpenMutexSem(SEM_PREFIX "CLIPSYN", &hmtxSyn);
if (rc != 0) return -1;
rc = DosOpenEventSem(SEM_PREFIX "CLIPGET", &hevGet);
if (rc != 0) return -1;
/* rc = DosOpenEventSem(SEM_PREFIX "CLIPPUT", &hevPut);*/
/* if (rc != 0) return -1;*/
rc = DosOpenEventSem(SEM_PREFIX "CLIPEND", &hevEnd);
if (rc != 0) return -1;
DosRequestMutexSem(hmtxSyn, SEM_INDEFINITE_WAIT);
DosResetEventSem(hevEnd, &PostCount);
DosPostEventSem(hevGet);
DosWaitEventSem(hevEnd, SEM_INDEFINITE_WAIT);
if (0 == DosGetNamedSharedMem((void **)&mem, MEM_PREFIX "CLIPDATA", PAG_READ | PAG_WRITE)) {
cd->fLen = *(ULONG*)mem;
cd->fChar = strdup(mem + 4);
DosFreeMem(mem);
} else {
cd->fLen = 0;
cd->fChar = 0;
}
DosPostEventSem(hevGet);
DosReleaseMutexSem(hmtxSyn);
/* DosCloseEventSem(hevPut);*/
DosCloseEventSem(hevGet);
DosCloseEventSem(hevEnd);
DosCloseMutexSem(hmtxSyn);
return 0;
}
示例7: internal_SetPageFont
static void internal_SetPageFont(HWND hwnd)
{
char *pchTemp;
// Set new window fonts!
if (DosRequestMutexSem(hmtxUseNLSTextArray, SEM_INDEFINITE_WAIT)==NO_ERROR)
{
pchTemp = apchNLSText[SSMODULE_NLSTEXT_FONTTOUSE];
if (pchTemp)
{
HWND hwndChild;
HENUM henum;
// Oookay, we have the font, set the page and all controls inside it!
WinSetPresParam(hwnd, PP_FONTNAMESIZE,
strlen(pchTemp)+1,
pchTemp);
// Now go through all of its children, and set it there, too!
henum = WinBeginEnumWindows(hwnd);
while ((hwndChild = WinGetNextWindow(henum))!=NULLHANDLE)
{
WinSetPresParam(hwndChild, PP_FONTNAMESIZE,
strlen(pchTemp)+1,
pchTemp);
}
WinEndEnumWindows(henum);
}
DosReleaseMutexSem(hmtxUseNLSTextArray);
}
}
示例8: cairo_os2_surface_set_hwnd
/**
* cairo_os2_surface_set_hwnd:
* @surface: the cairo surface to associate with the window handle
* @hwnd_client_window: the window handle of the client window
*
* Sets window handle for surface. If Cairo wants to blit into the window
* because it is set to blit as the surface changes (see
* cairo_os2_surface_set_manual_window_refresh()), then there are two ways it
* can choose:
* If it knows the HWND of the surface, then it invalidates that area, so the
* application will get a WM_PAINT message and it can call
* cairo_os2_surface_refresh_window() to redraw that area. Otherwise cairo itself
* will use the HPS it got at surface creation time, and blit the pixels itself.
* It's also a solution, but experience shows that if this happens from a non-PM
* thread, then it can screw up PM internals.
*
* So, best solution is to set the HWND for the surface after the surface
* creation, so every blit will be done from application's message processing
* loop, which is the safest way to do.
*
* Since: 1.4
**/
void
cairo_os2_surface_set_hwnd (cairo_surface_t *surface,
HWND hwnd_client_window)
{
cairo_os2_surface_t *local_os2_surface;
local_os2_surface = (cairo_os2_surface_t *) surface;
if ((!local_os2_surface) ||
(local_os2_surface->base.backend != &cairo_os2_surface_backend))
{
/* Invalid parameter (wrong surface)! */
return;
}
if (DosRequestMutexSem (local_os2_surface->hmtx_use_private_fields, SEM_INDEFINITE_WAIT)
!= NO_ERROR)
{
/* Could not get mutex! */
return;
}
local_os2_surface->hwnd_client_window = hwnd_client_window;
DosReleaseMutexSem (local_os2_surface->hmtx_use_private_fields);
}
示例9: internal_SetPwdProtWindowText
static void internal_SetPwdProtWindowText(HWND hwnd)
{
char *pchTemp;
// Set new window texts!
if (DosRequestMutexSem(hmtxUseNLSTextArray, SEM_INDEFINITE_WAIT)==NO_ERROR)
{
pchTemp = apchNLSText[SSMODULE_NLSTEXT_PWDPROT_ASK_TITLE];
if (pchTemp)
WinSetWindowText(hwnd, pchTemp);
pchTemp = apchNLSText[SSMODULE_NLSTEXT_PWDPROT_ASK_TEXT];
if (pchTemp)
WinSetDlgItemText(hwnd, ST_PLEASEENTERTHEPASSWORD, pchTemp);
pchTemp = apchNLSText[SSMODULE_NLSTEXT_PWDPROT_ASK_OKBUTTON];
if (pchTemp)
WinSetDlgItemText(hwnd, PB_OK, pchTemp);
pchTemp = apchNLSText[SSMODULE_NLSTEXT_PWDPROT_ASK_CANCELBUTTON];
if (pchTemp)
WinSetDlgItemText(hwnd, PB_CANCEL, pchTemp);
DosReleaseMutexSem(hmtxUseNLSTextArray);
}
}
示例10: _cairo_os2_surface_release_source_image
static void
_cairo_os2_surface_release_source_image (void *abstract_surface,
cairo_image_surface_t *image,
void *image_extra)
{
cairo_os2_surface_t *local_os2_surface;
local_os2_surface = (cairo_os2_surface_t *) abstract_surface;
if ((!local_os2_surface) ||
(local_os2_surface->base.backend != &cairo_os2_surface_backend))
{
/* Invalid parameter (wrong surface)! */
return;
}
/* Decrease Lend counter! */
DosRequestMutexSem (local_os2_surface->hmtx_use_private_fields, SEM_INDEFINITE_WAIT);
if (local_os2_surface->pixel_array_lend_count > 0)
local_os2_surface->pixel_array_lend_count--;
DosPostEventSem (local_os2_surface->hev_pixel_array_came_back);
DosReleaseMutexSem (local_os2_surface->hmtx_use_private_fields);
return;
}
示例11: RequestCom
static int RequestCom(void)
{
USHORT res;
HMTX sem=0;
printf("Sending message to AM4PM to release COM port\n");
res=SendExtQMsg(EQ_RELCOM, NULL, 0);
if (res)
return res;
res=DosOpenMutexSem(szSemCom, &sem);
if (res)
{
printf("Error %u opening semaphore\n", res);
return 3;
}
res=DosRequestMutexSem(sem, 120000l);
if (res)
{
DosCloseMutexSem(sem);
if (res==ERROR_TIMEOUT)
{
printf("Timeout waiting for AM4PM to release COM port\n");
return 4;
}
printf("Error %u waiting for semaphore\n", res);
return 3;
}
DosReleaseMutexSem(sem);
DosCloseMutexSem(sem);
return 0;
}
示例12: MCIDRVSave
RC MCIDRVSave (FUNCTION_PARM_BLOCK *pFuncBlock)
{
ULONG ulrc = MCIERR_SUCCESS; // Propogated Error Code
ULONG ulParam1; // Message flags
PMCI_INFO_PARMS pInfoParms; // Pointer to info structure
PMCI_GENERIC_PARMS pDrvSaveParms; // Pointer to GENERIC structure
PINSTANCE pInstance; // Pointer to instance
/*****************************************************/
/* dereference the values from pFuncBlock */
/*****************************************************/
ulParam1 = pFuncBlock->ulParam1;
pInstance = pFuncBlock->pInstance;
pDrvSaveParms = (PMCI_GENERIC_PARMS)pFuncBlock->pParam2;
/*****************************************************/
/* NOTE ----->>> */
/* This is the basic function that should be */
/* performed. See the other samples in the toolkit */
/* for streaming and MMIO considerations */
/*****************************************************/
DosRequestMutexSem (pInstance->hmtxAccessSem, -2); // wait for semaphore
pInstance->Active = FALSE;
DosReleaseMutexSem (pInstance->hmtxAccessSem); // release semaphore
return (ulrc);
} /* end of MCIDRVSave */
示例13: GetDefaultEditorPlugin
WaWEPlugin_p GetDefaultEditorPlugin()
{
WaWEPlugin_p pResult = NULL;
WaWEPlugin_p pTemp;
// The default editor plugin is the edit plugin with the
// greatest iPluginImportance value!
if (DosRequestMutexSem(PluginListProtector_Sem, SEM_INDEFINITE_WAIT)==NO_ERROR)
{
pTemp = PluginListHead;
while (pTemp)
{
if (pTemp->iPluginType == WAWE_PLUGIN_TYPE_EDITOR)
{
if (!pResult) pResult = pTemp;
else
if (pResult->iPluginImportance < pTemp->iPluginImportance)
pResult = pTemp;
}
pTemp = pTemp->pNext;
}
DosReleaseMutexSem(PluginListProtector_Sem);
}
return pResult;
}
示例14: _cairo_os2_surface_acquire_dest_image
static cairo_status_t
_cairo_os2_surface_acquire_dest_image (void *abstract_surface,
cairo_rectangle_int_t *interest_rect,
cairo_image_surface_t **image_out,
cairo_rectangle_int_t *image_rect,
void **image_extra)
{
cairo_os2_surface_t *local_os2_surface;
local_os2_surface = (cairo_os2_surface_t *) abstract_surface;
if ((!local_os2_surface) ||
(local_os2_surface->base.backend != &cairo_os2_surface_backend))
{
/* Invalid parameter (wrong surface)! */
return _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
}
DosRequestMutexSem (local_os2_surface->hmtx_use_private_fields, SEM_INDEFINITE_WAIT);
/* Increase lend counter */
local_os2_surface->pixel_array_lend_count++;
*image_out = local_os2_surface->image_surface;
*image_extra = NULL;
image_rect->x = 0;
image_rect->y = 0;
image_rect->width = local_os2_surface->bitmap_info.cx;
image_rect->height = local_os2_surface->bitmap_info.cy;
DosReleaseMutexSem (local_os2_surface->hmtx_use_private_fields);
return CAIRO_STATUS_SUCCESS;
}
示例15: DosRequestMutexSem
void omni_condition::wait(void)
{
_internal_omni_thread_helper me;
DosRequestMutexSem( crit , SEM_INDEFINITE_WAIT );
me->cond_next = NULL;
me->cond_prev = waiting_tail;
if (waiting_head == NULL)
waiting_head = me;
else
waiting_tail->cond_next = me;
waiting_tail = me;
me->cond_waiting = TRUE;
DosReleaseMutexSem( crit );
mutex->unlock();
APIRET result = DosWaitEventSem(me->cond_semaphore, SEM_INDEFINITE_WAIT);
ULONG c;
DosResetEventSem(me->cond_semaphore,&c);
mutex->lock();
if (result != 0) throw omni_thread_fatal(result);
}