本文整理汇总了C++中clock_nanosleep函数的典型用法代码示例。如果您正苦于以下问题:C++ clock_nanosleep函数的具体用法?C++ clock_nanosleep怎么用?C++ clock_nanosleep使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了clock_nanosleep函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: send_state
/*
* Sends the stored DMX state to its associated DMX port. If fewer than
* frame_period microseconds have elapsed since the start of the last frame,
* then this function will delay until that time, unless status->period_mode is
* nonzero, in which case calls to send_state will be ignored until the
* specified frame period has elapsed. This function should be called at least
* once per second. Returns zero on success, nonzero on error.
*/
int send_state(dmx_state *status)
{
struct timespec this_time;
if(status == NULL) {
fprintf(stderr, "NULL status parameter");
return -1;
}
// Mark before break + rate control
fsync(status->fd); // fsync on a tty probably doesn't do anything...
if(status->period_mode) {
// Skip frame rate control mode
clock_gettime(CLOCK_MONOTONIC, &this_time);
if(compare_timespec(&this_time, status->next_time) < 0) {
return 0;
}
} else {
// Sleep rate control mode
while(clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, status->next_time, NULL) == -1 && errno==EINTR) {
// Repeatedly do nothing as long as clock_nanosleep() gets
// interrupted (this space intentionally left blank)
}
}
clock_gettime(CLOCK_MONOTONIC, status->next_time);
status->next_time->tv_nsec += status->frame_period * 1000;
if(status->next_time->tv_nsec >= 1000000000) {
status->next_time->tv_nsec -= 1000000000;
status->next_time->tv_sec += 1;
}
// Break
if(ioctl(status->fd, TIOCSBRK, 0)) {
perror("Error setting break");
return -1;
}
usleep(status->break_time);
if(ioctl(status->fd, TIOCCBRK, 0)) {
perror("Error clearing break");
return -1;
}
// Mark after break
usleep(status->mark_time);
// Data
if(write(status->fd, &status->start_code, 1) < 0) {
perror("Error sending start code");
return -1;
}
if(write(status->fd, status->dmx_values, status->channels_to_send) < 0) {
perror("Error sending dmx data");
return -1;
}
return 0;
}
开发者ID:JakDaniels,项目名称:hac_xap,代码行数:65,代码来源:libdmx485.c
示例2: timeradd
void
RTClock::sleepNext ()
{
timeradd (&last_, &interval_, &last_);
struct timespec req = timespecFromTimeval (last_);
req.tv_sec = last_.tv_sec;
req.tv_nsec = 1000 * last_.tv_usec;
clock_nanosleep (CLOCK_REALTIME, TIMER_ABSTIME, &req, NULL);
}
开发者ID:INCF,项目名称:MUSIC,代码行数:9,代码来源:rtclock.cpp
示例3: while
void *blink5Hz(void *bla)
{
struct timespec request;
request.tv_nsec = 200000000;
request.tv_sec = request.tv_nsec / 1000000000;
while(!SHUTDOWN)
{
while(count % 2 == 0)
{
GPIO_write(LED_PATH, LED_ON);
clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);
GPIO_write(LED_PATH, LED_OFF);
clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);
}
clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);
}
return;
}
开发者ID:roroettg,项目名称:systemsoftware,代码行数:19,代码来源:led5.c
示例4: sleepFor
int sleepFor( int32_t seconds,int32_t nanoseconds)
{
struct timespec sSleepTime,sRemainder;
int returnVal;
sSleepTime.tv_sec = seconds;
sSleepTime.tv_nsec = nanoseconds;
// printf("target sec: %d, target nsec: %d\n",seconds,nanoseconds);
returnVal = clock_nanosleep(CLOCK_REALTIME,0,&sSleepTime,&sRemainder);
return returnVal;
}
开发者ID:ahorjia,项目名称:TwoWayTimeSync,代码行数:10,代码来源:precisesleep.c
示例5: periodicPrint
void* periodicPrint() {
while(1) {
printf("hei\n");
struct timespec next;
clock_gettime(CLOCK_REALTIME, &next);
timespec_add_us(&next, 500000);
clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &next, NULL);
}
}
开发者ID:martinjensen91,项目名称:ttk4147,代码行数:10,代码来源:main.c
示例6: msleep
/*****************************************************************************
* msleep
*****************************************************************************/
void msleep( mtime_t delay )
{
struct timespec ts;
ts.tv_sec = delay / 1000000;
ts.tv_nsec = (delay % 1000000) * 1000;
#if defined( HAVE_CLOCK_NANOSLEEP )
int val;
while ( ( val = clock_nanosleep( CLOCK_MONOTONIC, 0, &ts, &ts ) ) == EINTR );
if( val == EINVAL )
{
ts.tv_sec = delay / 1000000;
ts.tv_nsec = (delay % 1000000) * 1000;
while ( clock_nanosleep( CLOCK_REALTIME, 0, &ts, &ts ) == EINTR );
}
#else
while ( nanosleep( &ts, &ts ) && errno == EINTR );
#endif
}
开发者ID:BATYD-Turksat,项目名称:dvblast,代码行数:22,代码来源:util.c
示例7: defined
void Timer::sync(Timer &t)
{
#if _POSIX_TIMERS > 0 && defined(HAVE_CLOCK_NANOSLEEP) && defined(POSIX_TIMERS)
clock_nanosleep(_posix_clocking, TIMER_ABSTIME, &t.timer, NULL);
#elif defined(_MSWINDOWS_)
SleepEx(t.get(), FALSE);
#else
usleep(t.get());
#endif
}
开发者ID:oudream,项目名称:ucommon,代码行数:10,代码来源:timer.cpp
示例8: nanosleep
/**
* Sleep some amount of time.
*
* This service suspends the calling thread until the wakeup time specified by
* @a rqtp, or a signal is delivered. The wakeup time is specified as a time
* interval.
*
* If this service is interrupted by a signal and @a rmtp is not @a NULL, the
* time remaining until the specified wakeup time is returned at the address @a
* rmtp.
*
* The resolution of this service is one system clock tick.
*
* @param rqtp address of the wakeup time.
*
* @param rmtp address where the remaining time before wakeup will be stored if
* the service is interrupted by a signal.
*
* @retval 0 on success;
* @retval -1 with @a errno set if:
* - EPERM, the caller context is invalid;
* - EINVAL, the specified wakeup time is invalid;
* - EINTR, this service was interrupted by a signal.
*
* @par Valid contexts:
* - Xenomai kernel-space thread,
* - Xenomai user-space thread (switches to primary mode).
*
* @see
* <a href="http://www.opengroup.org/onlinepubs/000095399/functions/nanosleep.html">
* Specification.</a>
*
*/
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
{
int err = clock_nanosleep(CLOCK_REALTIME, 0, rqtp, rmtp);
if (!err)
return 0;
thread_set_errno(err);
return -1;
}
开发者ID:BhargavKola,项目名称:xenomai-forge,代码行数:43,代码来源:clock.c
示例9: compensated_timer
void compensated_timer(void)
{
int ret, x;
cycles_t t1, t2, error;
x=0;
while(1){
before = get_cycles();
ret = clock_nanosleep(CLOCK_MONOTONIC, TIMER_RELTIME, &carrier_ts, NULL);
if(ret)
DIE("clock_nanosleep");
delta = get_cycles() - before;
again:
/*
* If we are pass our max tolerance there is nothing we can do
* other than compensating the time base backward
*/
if(delta > MONOTONIC_PULSE_CYCLE){
carrier_ts.tv_nsec = carrier_ts.tv_nsec -
((delta - MONOTONIC_PULSE_CYCLE)/CPU_CYCLE_PER_NSEC);
fprintf(stderr, "#%Lu\n",carrier_ts.tv_nsec);
/*
* Here this is a cut & paste from above to avoid clobbering the
* main loop with if / else
*/
before = get_cycles();
ret = clock_nanosleep(CLOCK_MONOTONIC, TIMER_RELTIME, &carrier_ts, NULL);
/* Reset the time base to original value */
carrier_ts.tv_nsec = V_SYNC_NSEC_PERIOD;
if(ret)
DIE("clock_nanosleep");
delta = get_cycles() - before;
goto again;
}
calibrated_ldelay(MONOTONIC_PULSE_CYCLE - delta);
fprintf(stderr," %Lu\n", (get_cycles() - before));
if(!(x%100))
fprintf(stderr, ".");
}
}
开发者ID:jackalexcasey,项目名称:doc,代码行数:43,代码来源:bogomips.c
示例10: sleep_until
// Adds "delay" nanoseconds to timespecs and sleeps until that time
static void sleep_until(struct timespec *ts, int delay)
{
ts->tv_nsec += delay;
if(ts->tv_nsec >= 1000*1000*1000) {
ts->tv_nsec -= 1000*1000*1000;
ts->tv_sec++;
}
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, ts, NULL);
}
开发者ID:OliverGesch,项目名称:Xenomai-GPIO-test,代码行数:11,代码来源:motor_xenomai.c
示例11: nanosleep_lat_test
int nanosleep_lat_test(int clockid, long long ns)
{
struct timespec start, end, target;
long long latency = 0;
int i, count;
target.tv_sec = ns/NSEC_PER_SEC;
target.tv_nsec = ns%NSEC_PER_SEC;
if (clock_gettime(clockid, &start))
return UNSUPPORTED;
if (clock_nanosleep(clockid, 0, &target, NULL))
return UNSUPPORTED;
count = 10;
/* First check relative latency */
clock_gettime(clockid, &start);
for (i = 0; i < count; i++)
clock_nanosleep(clockid, 0, &target, NULL);
clock_gettime(clockid, &end);
if (((timespec_sub(start, end)/count)-ns) > UNRESONABLE_LATENCY) {
printf("Large rel latency: %lld ns :", (timespec_sub(start, end)/count)-ns);
return -1;
}
/* Next check absolute latency */
for (i = 0; i < count; i++) {
clock_gettime(clockid, &start);
target = timespec_add(start, ns);
clock_nanosleep(clockid, TIMER_ABSTIME, &target, NULL);
clock_gettime(clockid, &end);
latency += timespec_sub(target, end);
}
if (latency/count > UNRESONABLE_LATENCY) {
printf("Large abs latency: %lld ns :", latency/count);
return -1;
}
return 0;
}
开发者ID:020gzh,项目名称:linux,代码行数:43,代码来源:nsleep-lat.c
示例12: main
int main()
{
struct sigaction sa;
pthread_t thread;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sa.sa_handler = sigintHandler;
if (sigaction(SIGINT, &sa, NULL) == -1)
{
printf("MAIN: reserving sigaction failed!\n");
return -1;
}
GPIO_export(SWITCH);
GPIO_export(LED);
GPIO_direction(SWITCH_DIRECTION_PATH,"in");
GPIO_direction(LED_DIRECTION_PATH,"out");
GPIO_write(LED_PATH, LED_OFF);
if(pthread_create(&thread, NULL , blink5Hz , NULL))
{
printf("MAIN: error: Thread-creation failed!\n");
return -1;
}
struct timespec request;
request.tv_nsec = 50000000;
request.tv_sec = request.tv_nsec / 1000000000;
printf("Push the Button ..");fflush(stdout);
while(!SHUTDOWN)
{
while(strcmp(GPIO_read(SWITCH_PATH),LOW) != 0)
clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);
while(strcmp(GPIO_read(SWITCH_PATH),HIGH) != 0)
clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);
count++;
}
}
开发者ID:roroettg,项目名称:systemsoftware,代码行数:43,代码来源:led5.c
示例13: clock_nanosleep
void *timeout_helper(void *arg)
{
struct to_info *tip;
tip = (struct to_info *)arg;
clock_nanosleep(CLOCK_REALTIME, 0, &tip->to_wait, NULL);
(*tip->to_fn)(tip->to_arg);
free(arg);
return (0);
}
开发者ID:kingfree,项目名称:haut,代码行数:10,代码来源:timeout.c
示例14: main
int main(){
mqd_t mq;
struct mq_attr attr;
char QUEUE_NAME[] = "/test1";
ssize_t bytes_read;
int ret;
struct timespec looptime;
looptime.tv_sec = 1;
looptime.tv_nsec = 0;
testStruct msg;
/* initialize the queue attributes */
attr.mq_flags = 0;
attr.mq_maxmsg = 1;
attr.mq_msgsize = sizeof(testStruct);
attr.mq_curmsgs = 0;
//mq_unlink(QUEUE_NAME);
/* create the message queue */
mq = mq_open(QUEUE_NAME, O_WRONLY|O_NONBLOCK);
int i;
for(i = 0; i < 10; i++)
{
msg.a = i+1;
msg.b = i+11;
ret = clock_nanosleep(CLOCK_REALTIME, NULL, &looptime, NULL);
if(ret < 0)
{
printf("Problem with sleep\n");
}
/* send the message */
bytes_read = mq_send(mq, (char *) &msg, 8, NULL);
if(bytes_read < 0)
{
perror("");
printf("error sending value to queue\n");
}
else
{
printf("sent: %d, %d\n",msg.a, msg.b);
}
}
mq_close(mq);
return 0;
};
开发者ID:richreece,项目名称:ECE6561_P4,代码行数:55,代码来源:sender.c
示例15: run_leapsec
static void run_leapsec(void)
{
const struct timespec sleeptime = { 0, NSEC_PER_SEC / 2 };
struct timespec now, leap, start;
struct timex tx;
clock_gettime(CLOCK_REALTIME, &now);
start = now;
tst_resm(TINFO, "test start at %s", strtime(&now));
test_hrtimer_early_expiration();
/* calculate the next leap second */
now.tv_sec += 86400 - now.tv_sec % 86400;
now.tv_nsec = 0;
leap = now;
tst_resm(TINFO, "scheduling leap second %s", strtime(&leap));
/* start before the leap second */
now.tv_sec -= SECONDS_BEFORE_LEAP;
if (clock_settime(CLOCK_REALTIME, &now) < 0)
tst_brkm(TBROK | TERRNO, cleanup, "clock_settime");
tst_resm(TINFO, "setting time to %s", strtime(&now));
/* reset NTP time state */
adjtimex_status(&tx, STA_PLL);
adjtimex_status(&tx, 0);
/* set the leap second insert flag */
adjtimex_status(&tx, STA_INS);
/* reliably sleep till after the leap second */
while (tx.time.tv_sec < leap.tv_sec + SECONDS_AFTER_LEAP) {
adjtimex_status(&tx, tx.status);
clock_nanosleep(CLOCK_MONOTONIC, 0, &sleeptime, NULL);
}
test_hrtimer_early_expiration();
adjtimex_status(&tx, STA_PLL);
adjtimex_status(&tx, 0);
/* recover from timer expiring state and restore time */
clock_gettime(CLOCK_REALTIME, &now);
start.tv_sec += now.tv_sec - (leap.tv_sec - SECONDS_BEFORE_LEAP);
start.tv_nsec += now.tv_nsec;
start.tv_sec += start.tv_nsec / NSEC_PER_SEC;
start.tv_nsec = start.tv_nsec % NSEC_PER_SEC;
tst_resm(TINFO, "restoring time to %s", strtime(&start));
/* calls clock_was_set() in kernel to revert inconsistency */
if (clock_settime(CLOCK_REALTIME, &start) < 0)
tst_brkm(TBROK | TERRNO, cleanup, "clock_settime");
test_hrtimer_early_expiration();
}
开发者ID:Altiscale,项目名称:sig-core-t_ltp,代码行数:55,代码来源:leapsec_timer.c
示例16: socket
void *client(void *arg)
{
struct rtipc_port_label plabel;
struct sockaddr_ipc svsaddr;
int ret, s, n = 0, len;
struct timespec ts;
char buf[128];
s = socket(AF_RTIPC, SOCK_DGRAM, IPCPROTO_BUFP);
if (s < 0)
fail("socket");
/*
* Set the port label. This name will be used to find the peer
* when connecting, instead of the port number. The label must
* be set _after_ the socket is bound to the port, so that
* BUFP does not try to register this label for the client
* port as well (like the server thread did).
*/
strcpy(plabel.label, BUFP_PORT_LABEL);
ret = setsockopt(s, SOL_BUFP, BUFP_LABEL,
&plabel, sizeof(plabel));
if (ret)
fail("setsockopt");
memset(&svsaddr, 0, sizeof(svsaddr));
svsaddr.sipc_family = AF_RTIPC;
svsaddr.sipc_port = -1; /* Tell BUFP to search by label. */
ret = connect(s, (struct sockaddr *)&svsaddr, sizeof(svsaddr));
if (ret)
fail("connect");
for (;;) {
len = strlen(msg[n]);
ret = write(s, msg[n], len);
if (ret < 0) {
close(s);
fail("write");
}
rt_printf("%s: sent %d bytes, \"%.*s\"\n",
__FUNCTION__, ret, ret, msg[n]);
n = (n + 1) % (sizeof(msg) / sizeof(msg[0]));
/*
* We run in full real-time mode (i.e. primary mode),
* so we have to let the system breathe between two
* iterations.
*/
ts.tv_sec = 0;
ts.tv_nsec = 500000000; /* 500 ms */
clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL);
}
return NULL;
}
开发者ID:BhargavKola,项目名称:xenomai-forge,代码行数:54,代码来源:bufp-label.c
示例17: sleep_for_ms
void sleep_for_ms(uint64_t ms) {
timespec ts;
ts.tv_sec = ms / 1000;
ts.tv_nsec = ms % 1000 * 1000000;
while (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL) == -1) {
if (errno != EINTR) {
roc_panic("clock_nanosleep(CLOCK_MONOTONIC): %s", errno_to_str().c_str());
}
}
}
开发者ID:digideskio,项目名称:roc,代码行数:11,代码来源:time.cpp
示例18: nssleep
int nssleep(long nsec) {
struct timespec sleeptime;
sleeptime.tv_sec = 0;
sleeptime.tv_nsec = nsec;
while (clock_nanosleep(CLOCK_MONOTONIC, 0, &sleeptime, NULL) == EINTR );
return 0;
}
开发者ID:ReinerText,项目名称:SySo,代码行数:11,代码来源:led250.c
示例19: main
int main(int argc, char *argv[])
{
struct timespec tssleep;
int pid;
struct sigaction act;
if ((pid = fork()) == 0) {
/* child here */
act.sa_handler = handler;
act.sa_flags = 0;
if (sigemptyset(&act.sa_mask) != 0) {
perror("sigemptyset() did not return success\n");
return CHILDFAIL;
}
if (sigaction(SIGABRT, &act, 0) != 0) {
perror("sigaction() did not return success\n");
return CHILDFAIL;
}
tssleep.tv_sec = SLEEPSEC;
tssleep.tv_nsec = 0;
if (clock_nanosleep(CLOCK_REALTIME, 0, &tssleep, NULL) == EINTR) {
return CHILDPASS;
} else {
printf("errno != EINTR\n");
return CHILDFAIL;
}
} else {
/* parent here */
int i;
sleep(1);
if (kill(pid, SIGABRT) != 0) {
printf("Could not raise signal being tested\n");
return PTS_UNRESOLVED;
}
if (wait(&i) == -1) {
perror("Error waiting for child to exit\n");
return PTS_UNRESOLVED;
}
if (WIFEXITED(i) && WEXITSTATUS(i)) {
printf("Test PASSED\n");
return PTS_PASS;
} else {
printf("Test FAILED\n");
return PTS_FAIL;
}
}
return PTS_UNRESOLVED;
}
开发者ID:Nan619,项目名称:ltp-ddt,代码行数:54,代码来源:10-1.c
示例20: rand_int
inline int rand_int()
{
struct timespec ts;
ts.tv_sec=0;
ts.tv_nsec=1;
clock_nanosleep(CLOCK_MONOTONIC,0,&ts,NULL);
clock_gettime(CLOCK_MONOTONIC,&ts);
unsigned seed=static_cast<unsigned>(0x0ffffffffl & ts.tv_nsec);
return rand_r(&seed);
}
开发者ID:iieplatform,项目名称:nynn_mm,代码行数:11,代码来源:nynn_ipc.hpp
注:本文中的clock_nanosleep函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论