这篇教程C++ DosRequestMutexSem函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中DosRequestMutexSem函数的典型用法代码示例。如果您正苦于以下问题:C++ DosRequestMutexSem函数的具体用法?C++ DosRequestMutexSem怎么用?C++ DosRequestMutexSem使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了DosRequestMutexSem函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: vlc_sem_waitvoid 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);}
开发者ID:CSRedRat,项目名称:vlc,代码行数:30,
示例2: thread_cond_timedwaitstatic 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;}
开发者ID:cmjonze,项目名称:apr,代码行数:49,
示例3: RequestComstatic 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;}
开发者ID:OS2World,项目名称:APP-COMM-AM4PM,代码行数:34,
示例4: dump_bufferstatic 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;}
开发者ID:SimonKagstrom,项目名称:sarien-j2me,代码行数:35,
示例5: DosRequestMutexSem /* virtual */ void BeginCritical(bool allow_recursive = false) { /* os2 mutex is recursive by itself */ DosRequestMutexSem(mutex, (unsigned long) SEM_INDEFINITE_WAIT); this->recursive_count++; if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); }
开发者ID:Latexi95,项目名称:openttd,代码行数:7,
示例6: mutevoid mute(int state){ ULONG rc; if ((rc=DosRequestMutexSem(hmtxOC, SEM_INDEFINITE_WAIT))) { log_warning(dlog, "mute, DosRequestMutexSem rc=%i", rc); return; } if (usDeviceID) { MCI_SET_PARMS MciSetParms; memset(&MciSetParms, 0, sizeof(MCI_SET_PARMS)); MciSetParms.ulAudio = MCI_SET_AUDIO_ALL; rc = mciSendCommand(usDeviceID, MCI_SET, MCI_WAIT|state|MCI_SET_AUDIO, (PVOID) &MciSetParms, 0); if (rc != MCIERR_SUCCESS) sound_err(dlog, rc, "Setting mute state (MCI_SET_ON/OFF)."); } DosReleaseMutexSem(hmtxOC); if (state==MCI_SET_ON) set_volume(volume);}
开发者ID:BigBoss21X,项目名称:vice-emu,代码行数:27,
示例7: os2MutexEnter/*** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt** to enter a mutex. If another thread is already within the mutex,** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can** be entered multiple times by the same thread. In such cases the,** mutex must be exited an equal number of times before another thread** can enter. If the same thread tries to enter any other kind of mutex** more than once, the behavior is undefined.*/static void os2MutexEnter(sqlite3_mutex *p){ assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) ); DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT);#ifdef SQLITE_DEBUG if( p->trace ) os2MutexTrace(p, "enter");#endif}
开发者ID:77songsong,项目名称:sqlite3,代码行数:18,
示例8: internal_SetPageFontstatic 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); }}
开发者ID:OS2World,项目名称:UTIL-WPS-Doodle-Screen-Saver,代码行数:34,
示例9: _cairo_os2_surface_finishstatic cairo_status_t_cairo_os2_surface_finish (void *abstract_surface){ 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); /* Destroy old image surface */ cairo_surface_destroy ((cairo_surface_t *) (local_os2_surface->image_surface)); /* Destroy old pixel buffer */ _buffer_free (local_os2_surface->pixels); DosCloseMutexSem (local_os2_surface->hmtx_use_private_fields); DosCloseEventSem (local_os2_surface->hev_pixel_array_came_back); /* The memory itself will be free'd by the cairo_surface_destroy () * who called us. */ return CAIRO_STATUS_SUCCESS;}
开发者ID:MozillaOnline,项目名称:gecko-dev,代码行数:28,
示例10: internal_SetPwdProtWindowTextstatic 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); }}
开发者ID:OS2World,项目名称:UTIL-WPS-Doodle-Screen-Saver,代码行数:26,
示例11: _cairo_os2_surface_release_source_imagestatic 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;}
开发者ID:MozillaOnline,项目名称:gecko-dev,代码行数:25,
示例12: 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 **/voidcairo_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);}
开发者ID:MozillaOnline,项目名称:gecko-dev,代码行数:47,
示例13: GetExportPluginForFormatWaWEPlugin_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;}
开发者ID:OS2World,项目名称:MM-SOUND-WaWE,代码行数:35,
示例14: MCIDRVSaveRC 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 */
开发者ID:MbqIIB,项目名称:DEV-SAMPLES-IBM_Dev_Toolkit_Samples,代码行数:29,
示例15: CreatePluginListWaWEPluginList_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;}
开发者ID:OS2World,项目名称:MM-SOUND-WaWE,代码行数:35,
示例16: GetDefaultEditorPluginWaWEPlugin_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;}
开发者ID:OS2World,项目名称:MM-SOUND-WaWE,代码行数:27,
示例17: DosRequestMutexSemvoid 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);}
开发者ID:OS2World,项目名称:APP-INTERNET-PMVNC-Server,代码行数:27,
示例18: _cairo_os2_surface_acquire_dest_imagestatic 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;}
开发者ID:MozillaOnline,项目名称:gecko-dev,代码行数:34,
示例19: set_volumevoid set_volume(int vol){ ULONG rc; if ((rc=DosRequestMutexSem(hmtxOC, SEM_INDEFINITE_WAIT))) { log_warning(dlog, "set_volume, DosRequestMutexSem rc=%i", rc); return; } if (usDeviceID) { MCI_SET_PARMS MciSetParms; memset(&MciSetParms, 0, sizeof(MCI_SET_PARMS)); MciSetParms.ulLevel = vol; MciSetParms.ulAudio = MCI_SET_AUDIO_ALL; log_message(dlog, "Setting volume to %d%%", vol); rc = mciSendCommand(usDeviceID, MCI_SET, MCI_WAIT| MCI_SET_VOLUME|MCI_SET_AUDIO, (PVOID) &MciSetParms, 0); if (rc != MCIERR_SUCCESS) sound_err(dlog, rc, "Setting up Volume (MCI_SET)."); } volume=vol; DosReleaseMutexSem(hmtxOC);}
开发者ID:BigBoss21X,项目名称:vice-emu,代码行数:29,
示例20: GetClipTextint 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;}
开发者ID:OS2World,项目名称:APP-EDITOR-fte,代码行数:34,
示例21: __objc_mutex_trylock/* Try to grab a lock on a mutex. */int__objc_mutex_trylock(objc_mutex_t mutex){ if (DosRequestMutexSem ((HMTX)(mutex->backend),0L) != 0) return -1; else return 0;}
开发者ID:DJHartley,项目名称:iphone-dev,代码行数:9,
示例22: PM_mainloopvoid PM_mainloop(VOID *arg){ SIZEL sizelHps = {0,0}; HAB hab; // Anchor Block to PM HMQ hmq; // Handle to Msg Queue HDC hdc; // Handle to Device (Window-Screen) QMSG qmsg; // Msg Queue Event video_canvas_t *ptr=(video_canvas_t*)arg; hab = WinInitialize(0); // Initialize PM hmq = WinCreateMsgQueue(hab, 0); // Create Msg Queue // 2048 Byte Memory (Used eg for the Anchor Blocks WinRegisterClass(hab, szClientClass, PM_winProc, CS_SIZEREDRAW, 2048); (*ptr)->hwndFrame = WinCreateStdWindow(HWND_DESKTOP, WS_ANIMATE, &flFrameFlags, szClientClass, szTitleBarText, 0L, 0, 0, &((*ptr)->hwndClient)); WinSetWindowPos((*ptr)->hwndFrame, HWND_TOP, 0, 0, (*ptr)->width*stretch, (*ptr)->height*stretch+ WinQuerySysValue(HWND_DESKTOP, SV_CYTITLEBAR), // +1 with gcc? SWP_SIZE|SWP_SHOW|SWP_ZORDER|SWP_ACTIVATE); // Make visible, resize, top window WinSetWindowPtr((*ptr)->hwndClient, QWL_USER, (VOID*)(*ptr)); // -------------------- // maybe ---> WM_CREATE // -------------------- hdc = WinOpenWindowDC((*ptr)->hwndFrame); (*ptr)->hps = GpiCreatePS(WinQueryAnchorBlock((*ptr)->hwndFrame), hdc, &sizelHps, PU_PELS|GPIF_DEFAULT|GPIT_MICRO|GPIA_ASSOC); // GPIT_NORMAL does also work with vac++ (*ptr)->pbmi = lib_calloc(1, 16+sizeof(RGB2)*256); (*ptr)->pbmi->cbFix = 16; // Size of cbFix, cPlanes, cBitCount = Begin of RGB2 (*ptr)->pbmi->cPlanes = 1; (*ptr)->pbmi->cBitCount = 8; // Using 8-bit color mode (*ptr)->palette=(RGB2*)((ULONG)(*ptr)->pbmi+(*ptr)->pbmi->cbFix); vidlog("pbmiAllocated",0); (*ptr)->pbmi_initialized = TRUE; // All stuff for pbmi created // DosReleaseMutexSem(hmtx); // gfx init end //----------------------- while (WinGetMsg (hab, &qmsg, NULLHANDLE, 0, 0)) WinDispatchMsg (hab, &qmsg) ; // (*ptr)->pbmi_initialized = FALSE; DosRequestMutexSem(hmtx, SEM_INDEFINITE_WAIT); GpiDestroyPS((*ptr)->hps); WinDestroyWindow ((*ptr)->hwndFrame); // why was this commented out? --> WM_CLOSE ?? WinDestroyMsgQueue(hmq); // Destroy Msg Queue WinTerminate (hab); // Release Anchor to PM lib_free((*ptr)->pbmi); // is this the right moment to do this??? // lib_free(*ptr); // Vice crashes... why??? This must be done in the main thread! exit(0); // Kill VICE, All went OK}
开发者ID:BigBoss21X,项目名称:vice-emu,代码行数:58,
示例23: DARTEventLONG APIENTRY DARTEvent (ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags){ ULONG rc; switch (ulFlags) { case MIX_WRITE_COMPLETE: // // start the playback of the next buffer // rc=MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, &(buffers[play]), 1); // // get the sound mutex // if (DosRequestMutexSem(hmtxSnd, SEM_INDEFINITE_WAIT)) return TRUE; // // empty the buffer which was finished // memset(buffers[last].pBuffer, 0, BufferParms.ulBufferSize); // // point to the next playable buffer and remember this buffer // as the last one which was played // last = play++; play %= BufferParms.ulNumBuffers; // // release mutex // DosReleaseMutexSem(hmtxSnd); if (rc != MCIERR_SUCCESS) sound_err(dlog, rc, "Writing to Mixer (pmixWrite, MIX_WRITE_COMPLETE)."); return TRUE; case MIX_STREAM_ERROR | MIX_WRITE_COMPLETE: // 130 /* error occur in device */ switch (ulStatus) { case ERROR_DEVICE_UNDERRUN: // 5626 sound_err(dlog, ulStatus, "Device underrun."); play += 2; play %= BufferParms.ulNumBuffers; break; case ERROR_DEVICE_OVERRUN: // 5627 sound_err(dlog, ulStatus, "Device overrun."); break; } rc=MixSetupParms.pmixWrite(MixSetupParms.ulMixHandle, &(buffers[play]), 1); if (rc != MCIERR_SUCCESS) sound_err(dlog, rc, "Writing to Mixer (pmixWrite, MIX_STREAM_ERROR)."); return TRUE; } return TRUE;}
开发者ID:BigBoss21X,项目名称:vice-emu,代码行数:58,
示例24: que_nint que_n (void){ int result; DosRequestMutexSem (mtx_Queue, SEM_INDEFINITE_WAIT); result = nq; DosReleaseMutexSem (mtx_Queue); return result;}
开发者ID:OS2World,项目名称:LIB-libfly,代码行数:9,
示例25: dart_write2static int dart_write2(SWORD *pbuf, size_t nr){ APIRET rc; int nrtowrite; written += nr; nr *= sizeof(SWORD); while (nr) { // // check if the buffer can be filled completely // nrtowrite = nr>rest ? rest : nr; if ((rc=DosRequestMutexSem(hmtxSnd, SEM_INDEFINITE_WAIT))) { log_warning(dlog, "dart_write2, DosRequestMutexSem rc=%i", rc); return 1; } // // if the buffer we want to write to is the next one which is // played, skip one buffer and write to the overnext // if (play==(pos+1)%BufferParms.ulNumBuffers) { pos = (++pos)%BufferParms.ulNumBuffers; written += BufferParms.ulBufferSize/sizeof(SWORD); } // // fill the pos-th buffer // memcpy((void*)((ULONG)buffers[pos].pBuffer+(BufferParms.ulBufferSize-rest)), pbuf, nrtowrite); rest -= nrtowrite; // // check if the buffer was filled completely // if (!rest) { pos++; pos %= BufferParms.ulNumBuffers; rest = BufferParms.ulBufferSize; } DosReleaseMutexSem(hmtxSnd); nr -= nrtowrite; } return 0;}
开发者ID:BigBoss21X,项目名称:vice-emu,代码行数:56,
示例26: os2MutexTrystatic int os2MutexTry(sqlite3_mutex *p){ int rc = SQLITE_BUSY; assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) ); if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR ) { rc = SQLITE_OK;#ifdef SQLITE_DEBUG if( p->trace ) os2MutexTrace(p, "try");#endif } return rc;}
开发者ID:77songsong,项目名称:sqlite3,代码行数:11,
示例27: pthread_mutex_lockint DLLCALL pthread_mutex_lock(pthread_mutex_t* mutex){#if defined(PTHREAD_MUTEX_AS_WIN32_MUTEX) return (WaitForSingleObject(*mutex, INFINITE)==WAIT_OBJECT_0 ? 0 : EBUSY);#elif defined(_WIN32) /* Win32 Critical Section */ EnterCriticalSection(mutex); return 0; /* No error */#elif defined(__OS2__) return DosRequestMutexSem(*mutex, -1 /* SEM_INDEFINITE_WAIT */);#endif}
开发者ID:carriercomm,项目名称:syncfoss,代码行数:11,
示例28: os2MutexEnter/*** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt** to enter a mutex. If another thread is already within the mutex,** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can** be entered multiple times by the same thread. In such cases the,** mutex must be exited an equal number of times before another thread** can enter. If the same thread tries to enter any other kind of mutex** more than once, the behavior is undefined.*/static void os2MutexEnter(sqlite3_mutex *p){ TID tid; PID holder1; ULONG holder2; if( p==0 ) return; assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) ); DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT); DosQueryMutexSem(p->mutex, &holder1, &tid, &holder2); p->owner = tid; p->nRef++;}
开发者ID:KnowNo,项目名称:test-code-backup,代码行数:22,
示例29: pthread_mutex_trylockint DLLCALL pthread_mutex_trylock(pthread_mutex_t* mutex){#if defined(PTHREAD_MUTEX_AS_WIN32_MUTEX) return (WaitForSingleObject(*mutex, 0)==WAIT_OBJECT_0 ? 0 : EBUSY);#elif defined(_WIN32) /* Win32 Critical Section */ /* TryEnterCriticalSection only available on NT4+ :-( */ return (TryEnterCriticalSection(mutex) ? 0 : EBUSY);#elif defined(__OS2__) return DosRequestMutexSem(*mutex, 0 /* SEM_IMMEDIATE_RETURN */);#endif}
开发者ID:carriercomm,项目名称:syncfoss,代码行数:11,
注:本文中的DosRequestMutexSem函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ DosResetEventSem函数代码示例 C++ DosReleaseMutexSem函数代码示例 |