3479 phri = new HighResolutionInterval( ms ); 3480 if (WaitForMultipleObjects(1, events, FALSE, (DWORD)ms) == WAIT_TIMEOUT) { 3481 result = OS_TIMEOUT; 3482 } else { 3483 ResetEvent(osthread->interrupt_event()); 3484 osthread->set_interrupted(false); 3485 result = OS_INTRPT; 3486 } 3487 delete phri; //if it is NULL, harmless 3488 3489 // were we externally suspended while we were waiting? 3490 jt->check_and_wait_while_suspended(); 3491 } else { 3492 assert(!thread->is_Java_thread(), "must not be java thread"); 3493 Sleep((long) ms); 3494 result = OS_TIMEOUT; 3495 } 3496 return result; 3497 } 3498 3499 // Sleep forever; naked call to OS-specific sleep; use with CAUTION 3500 void os::infinite_sleep() { 3501 while (true) { // sleep forever ... 3502 Sleep(100000); // ... 100 seconds at a time 3503 } 3504 } 3505 3506 typedef BOOL (WINAPI * STTSignature)(void) ; 3507 3508 os::YieldResult os::NakedYield() { 3509 // Use either SwitchToThread() or Sleep(0) 3510 // Consider passing back the return value from SwitchToThread(). 3511 if (os::Kernel32Dll::SwitchToThreadAvailable()) { 3512 return SwitchToThread() ? os::YIELD_SWITCHED : os::YIELD_NONEREADY ; 3513 } else { 3514 Sleep(0); 3515 } 3516 return os::YIELD_UNKNOWN ; 3517 } 3518 | 3479 phri = new HighResolutionInterval( ms ); 3480 if (WaitForMultipleObjects(1, events, FALSE, (DWORD)ms) == WAIT_TIMEOUT) { 3481 result = OS_TIMEOUT; 3482 } else { 3483 ResetEvent(osthread->interrupt_event()); 3484 osthread->set_interrupted(false); 3485 result = OS_INTRPT; 3486 } 3487 delete phri; //if it is NULL, harmless 3488 3489 // were we externally suspended while we were waiting? 3490 jt->check_and_wait_while_suspended(); 3491 } else { 3492 assert(!thread->is_Java_thread(), "must not be java thread"); 3493 Sleep((long) ms); 3494 result = OS_TIMEOUT; 3495 } 3496 return result; 3497 } 3498 3499 // 3500 // Short sleep, direct OS call. 3501 // 3502 // ms = 0, means allow others (if any) to run. 3503 // 3504 void os::naked_short_sleep(jlong ms) { 3505 assert(ms < 1000, "Un-interruptable sleep, short time use only"); 3506 Sleep(ms); 3507 } 3508 3509 // Sleep forever; naked call to OS-specific sleep; use with CAUTION 3510 void os::infinite_sleep() { 3511 while (true) { // sleep forever ... 3512 Sleep(100000); // ... 100 seconds at a time 3513 } 3514 } 3515 3516 typedef BOOL (WINAPI * STTSignature)(void) ; 3517 3518 os::YieldResult os::NakedYield() { 3519 // Use either SwitchToThread() or Sleep(0) 3520 // Consider passing back the return value from SwitchToThread(). 3521 if (os::Kernel32Dll::SwitchToThreadAvailable()) { 3522 return SwitchToThread() ? os::YIELD_SWITCHED : os::YIELD_NONEREADY ; 3523 } else { 3524 Sleep(0); 3525 } 3526 return os::YIELD_UNKNOWN ; 3527 } 3528 |