Blame toonz/sources/stdfx/igs_resource_sleep_unix.cpp
|
Toshihiro Shimizu |
890ddd |
#include <stdexcept> // std::domain_error()</stdexcept>
|
|
Toshihiro Shimizu |
890ddd |
#include <cerrno> // errno</cerrno>
|
|
Toshihiro Shimizu |
890ddd |
#include "igs_resource_msg_from_err.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "igs_resource_sleep.h"
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
1second=1,000milli_seconds=1,000,000micro_seconds=1,000,000,000nano_seconds
|
|
Toshihiro Shimizu |
890ddd |
tv_sec(seconds)が負か、tv_nsec(nano_seconds)が0〜999,999,999範囲外、はエラー
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
void igs::resource::sleep_sn(const time_t seconds, const long nano_seconds)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
struct timespec req;
|
|
Toshihiro Shimizu |
890ddd |
req.tv_sec = seconds;
|
|
Toshihiro Shimizu |
890ddd |
req.tv_nsec = nano_seconds;
|
|
Toshihiro Shimizu |
890ddd |
struct timespec rem;
|
|
Toshihiro Shimizu |
890ddd |
rem.tv_sec = 0;
|
|
Toshihiro Shimizu |
890ddd |
rem.tv_nsec = 0;
|
|
Toshihiro Shimizu |
890ddd |
if (::nanosleep(&req, &rem) < 0) {
|
|
Toshihiro Shimizu |
890ddd |
throw std::domain_error(igs_resource_msg_from_err(
|
|
Toshihiro Shimizu |
890ddd |
TEXT("nanosleep(-)"), errno));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
windows ::Sleep()の仕様にあわせるためだけの関数
|
|
Toshihiro Shimizu |
890ddd |
1second = 1,000milli_seconds(ミリ秒)
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
void igs::resource::sleep_m(const DWORD milli_seconds)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
const time_t seconds = milli_seconds / 1000;
|
|
Toshihiro Shimizu |
890ddd |
const long nano_seconds = (milli_seconds % 1000) * 1000000;
|
|
Toshihiro Shimizu |
890ddd |
//std::cout << "milli_seconds=" << milli_seconds << std::endl;
|
|
Toshihiro Shimizu |
890ddd |
//std::cout << " seconds=" << seconds << std::endl;
|
|
Toshihiro Shimizu |
890ddd |
//std::cout << " nano_seconds=" << nano_seconds << std::endl;
|
|
Toshihiro Shimizu |
890ddd |
igs::resource::sleep_sn(seconds, nano_seconds);
|
|
Toshihiro Shimizu |
890ddd |
}
|