#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <errno.h>
#include <assert.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/select.h>
extern "C" {
static int xsignal (int sig, void (*handler)(int))
{
struct sigaction sa;
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
return sigaction(sig, &sa, NULL);
}
void sigalarm_handler (int) {}
}
int main ()
{
if (xsignal(SIGALRM, sigalarm_handler) != 0) {
perror("sigaction");
exit(EXIT_FAILURE);
}
struct itimerval it = { { 0, 200000 }, { 0, 150000 } };
if (setitimer(ITIMER_REAL, &it, 0) != 0) {
perror("setitimer");
exit(EXIT_FAILURE);
}
struct timeval tv;
for (int i = 0; i < 10; ++i) {
ssize_t select_result = select(0, 0, 0, 0, 0);
assert(select_result < 0 && errno == EINTR);
// get a sample
//...
gettimeofday(&tv, 0);
std::cerr << tv.tv_usec/1000 << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPGFzc2VydC5oPgoKI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KCmV4dGVybiAiQyIgewogICAgc3RhdGljIGludCB4c2lnbmFsIChpbnQgc2lnLCB2b2lkICgqaGFuZGxlcikoaW50KSkKICAgIHsKICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogICAgICAgIHNhLnNhX2hhbmRsZXIgPSBoYW5kbGVyOwogICAgICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKICAgICAgICBzYS5zYV9mbGFncyA9IDA7CiAgICAgICAgcmV0dXJuIHNpZ2FjdGlvbihzaWcsICZzYSwgTlVMTCk7CiAgICB9CgogICAgdm9pZCBzaWdhbGFybV9oYW5kbGVyIChpbnQpIHt9Cn0KCmludCBtYWluICgpCnsKICAgIGlmICh4c2lnbmFsKFNJR0FMUk0sIHNpZ2FsYXJtX2hhbmRsZXIpICE9IDApIHsKICAgICAgICBwZXJyb3IoInNpZ2FjdGlvbiIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KCiAgICBzdHJ1Y3QgaXRpbWVydmFsIGl0ID0geyB7IDAsIDIwMDAwMCB9LCB7IDAsIDE1MDAwMCB9IH07CiAgICBpZiAoc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmaXQsIDApICE9IDApIHsKICAgICAgICBwZXJyb3IoInNldGl0aW1lciIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KCiAgICBzdHJ1Y3QgdGltZXZhbCB0djsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewogICAgICAgIHNzaXplX3Qgc2VsZWN0X3Jlc3VsdCA9IHNlbGVjdCgwLCAwLCAwLCAwLCAwKTsKICAgICAgICBhc3NlcnQoc2VsZWN0X3Jlc3VsdCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwogICAgICAgIC8vIGdldCBhIHNhbXBsZQogICAgICAgIC8vLi4uCiAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CiAgICAgICAgc3RkOjpjZXJyIDw8IHR2LnR2X3VzZWMvMTAwMCA8PCBzdGQ6OmVuZGw7CiAgICB9Cn0K