예제 #1
0
void ultTestPing(char* conf) {
  unitSubheading("Test Ping");
  int result = ultPing();
  unitAssertZero("Test Ping Thread Spawn Result",result);
  utilSleep(3);
  ultPrintData();
}
예제 #2
0
bool animSleep(int ms) {
	if (sleepInterrupted) {
		return false;
	}
	scriptReleaseGIL();
	int time = glutGet(GLUT_ELAPSED_TIME);
	int returnAt = time + ms;
	int wakeAt, wakeAfter;
	animSleepActive=true;

	while ((ms=returnAt-time)>0) {
		wakeAfter=animFrameDelay;
		if (wakeAfter > animResponseDelay)
			wakeAfter=animResponseDelay;
		if (wakeAfter > ms)
			wakeAfter=ms;
		wakeAt=time+wakeAfter;

		updateStatus(0, true, "script");
		glutMainLoopEvent();
		if (sleepInterrupted)
			break;

		time = glutGet(GLUT_ELAPSED_TIME);
		wakeAfter=wakeAt-time;
		if (wakeAfter>0) {
			utilSleep(wakeAfter);
		}
		time = glutGet(GLUT_ELAPSED_TIME);
	}
	glutMainLoopEvent();
	animSleepActive=false;
	scriptAcquireGIL();
	scriptEventsSchedulePending();
	hidInvokeWaitingEvents();
	return !sleepInterrupted;
}
예제 #3
0
파일: IO.cpp 프로젝트: tynia/threads
int cpsOpen(cpsHandle& h, char* path, uint mode, uint iPermission)
{
   if (NULL == path)
   {
      LogError("path name is invalid");
      return -1;
   }
   int rc = 0;
   int tryn = 0;
#ifdef _WINDOWS
   inspire::CharConvertor con(path);
   int crMode = 0;  // create mode
   int rwMode = 0;  // read/write mode
   int shMode = 0;  // shared mode
   int attri  = 0;  // direct/sync I/O
   // create/open mode
   switch (mode & MODE_CREATE)
   {
   case MODE_DEFAULT:
      crMode = OPEN_EXISTING;
      break;
   case MODE_CREATEONLY:
      crMode = CREATE_NEW;
      break;
   case MODE_REPLACE:
      crMode = CREATE_ALWAYS;
      break;
   case MODE_CREATE:
      crMode = OPEN_ALWAYS;
      break;
   }

   // read/write access
   switch (mode & ACCESS_READWRITE)
   {
   case ACCESS_WRITEONLY:
      if (mode & SHAREDREAD)
      {
         rwMode = GENERIC_READ | GENERIC_WRITE;
      }
      else
      {
         rwMode = GENERIC_WRITE;
      }
      break;
   case ACCESS_READONLY:
      if ((mode | SHAREDREAD) == EXCLUSIVE)
      {
         rwMode = GENERIC_READ | GENERIC_WRITE;
      }
      else
      {
         rwMode = GENERIC_READ;
      }
      break;
   case ACCESS_READWRITE:
      rwMode = GENERIC_READ | GENERIC_WRITE;
      break;
   }

   // shared mode
   switch (mode & SHAREDWRITE)
   {
   case EXCLUSIVE:
      shMode = 0;
      break;
   case SHAREDREAD:
      if (mode | ACCESS_WRITEONLY)
      {
         shMode = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
      }
      else
      {
         shMode = FILE_SHARE_READ;
      }
      break;
   case SHAREDWRITE:
      shMode = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
      break;
   }

   // I/O
   if (mode & DIRECTIO)
   {
      attri |= FILE_FLAG_NO_BUFFERING;
   }

   if (mode & WRITETHROUGH)
   {
      attri |= FILE_FLAG_WRITE_THROUGH;
   }

   while (true)
   {
      ++tryn;

      h.hHandle = ::CreateFile(con.toString(), rwMode, shMode, NULL, crMode, attri, NULL);
      if (INVALID_HANDLE_VALUE == h.hHandle)
      {
         int err = utilGetLastError();
         if (ERROR_SHARING_VIOLATION == err && tryn < MAX_OPEN_RETRY)
         {
            utilSleep(100);
            continue;
         }
         switch (err)
         {
         case ERROR_SHARING_VIOLATION:
            rc = -1;
            LogError("Permission denied when open file: %s", path);
            break;
         default:
            rc = -1;
            LogError("I/O error when open file: %s", path);
            break;
         }
      }
      break;
   }
#else
   int iMode = 0;
   int direct = 0;
   int perm = ((iPermission != 0) ? iPermission : DEFAULT_FILE_ACCESS);
   // create/open mode
   switch (mode & MODE_CREATE)
   {
   case MODE_DEFAULT:
      iMode = 0;
      break;
   case MODE_CREATEONLY:
      iMode = O_CREAT | O_EXCL;
      break;
   case MODE_REPLACE:
      iMode = O_CREAT | O_TRUNC;
      break;
   case MODE_CREATE:
      iMode = O_CREAT;
      break;
   default:
      break;
   }

   // read/write access
   switch (mode & ACCESS_READWRITE)
   {
   case ACCESS_WRITEONLY:
      if (mode | SHAREDREAD)
      {
         iMode |= O_RDWR;
      }
      else
      {
         iMode |= O_WRONLY;
      }
      break;
   case ACCESS_READONLY:
      if ((mode & SHAREDREAD) == EXCLUSIVE)
      {
         iMode |= O_RDWR;
      }
      else
      {
         iMode |= O_RDONLY;
      }
      break;
   case ACCESS_READWRITE:
      iMode |= O_RDWR;
      break;
   }

   // I/O
   if (mode & DIRECTIO)
   {
      direct = O_DIRECT;
   }

   if (mode & WRITETHROUGH)
   {
      iMode |= O_SYNC;
   }

   int err = 0;
   while (true)
   {
      ++tryn;
      do 
      {
         h.hHandle = ::open(path, iMode | direct, perm);
      } while ((-1 == h.hHandle) && (EINTR == (err = utilGetLastError())));

      if (-1 == h.hHandle)
      {
         if ((EINVAL == err) && (O_DIRECT == direct))
         {
            direct = 0;
            continue;
         }
         else if ((ETXTBSY == err) && tryn < MAX_OPEN_RETRY)
         {
            utilSleep(100);
            continue;
         }
         rc = -1;
         switch (err)
         {
         case ENOENT:
            LogError("Try to open a file not exist, file: %s", path);
            break;
         case EEXIST:
            LogError("Try to create a file that existed, file: %s", path);
            break;
         case EACCES:
            LogError("Permission denied when open file: %s", path);
            break;
         default:
            LogError("I/O error occurs when open file: %s", path);
            break;
         }
      }
      break;
   }
#endif
   return rc;
}