コード例 #1
0
ファイル: vrpn_Thread.C プロジェクト: godbyk/vrpn
bool vrpn_Semaphore::destroy()
{
    if (fUsingLock) {
        usfreelock(l, vrpn_Semaphore::ppaArena);
    }
    else {
        usfreesema(ps, vrpn_Semaphore::ppaArena);
    }
    return true;
}
コード例 #2
0
ファイル: vrpn_Shared.C プロジェクト: lpberg/vrpn
bool vrpn_Semaphore::destroy() {
#ifdef sgi
  if (fUsingLock) {
    usfreelock( l, vrpn_Semaphore::ppaArena );
  } else {
    usfreesema( ps, vrpn_Semaphore::ppaArena );
  }
#elif defined(_WIN32)
  if (!CloseHandle(hSemaphore)) {
    // get error info from windows (from FormatMessage help page)
    LPVOID lpMsgBuf;

    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
		   FORMAT_MESSAGE_FROM_SYSTEM,
		   NULL,    GetLastError(),
		   MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		     // Default language
		   (LPTSTR) &lpMsgBuf,    0,    NULL );
    fprintf(stderr, "vrpn_Semaphore::destroy: error destroying semaphore, "
      "WIN32 CloseHandle call caused the following error: %s\n", (LPTSTR) lpMsgBuf);
    // Free the buffer.
    LocalFree( lpMsgBuf );
    return false;
  }
#else
  // Posix threads are the default.
#ifdef __APPLE__
  if (sem_close(semaphore) != 0) {
      perror("vrpn_Semaphore::destroy: error destroying semaphore.");
      return false;
  }
#else
  if (sem_destroy(semaphore) != 0) {
      fprintf(stderr, "vrpn_Semaphore::destroy: error destroying semaphore.\n");
      return false;
  }
#endif
  semaphore = NULL;
#endif
  return true;
}