新井です。

In message "[ruby-list:36112] Re: WindowsでThread"
  on Sun, 6 Oct 2002 01:24:34 +0900,
  Koji Arai <JCA02266 / nifty.ne.jp> wrote:
> 新井です。
> 
> In message "[ruby-list:36110] Re: Windows でThread"
>   on 05 Oct 2002 17:55:40 +0900,
>   WATANABE Hirofumi <eban / os.rim.or.jp> wrote:
> > わたなべです。
> 
> > Cygwin版は先日#undef HAVE_SETITIMER相当の変更をしたので、
> > timeoutします。1.6.8, 1.7.3からということにするのがいいかな。
> 
> あっ、なるほど [ruby-list:24637] をよく読んでなかったようで
> す。Cygwin の setitimer には何か問題がありそうということなん
> ですね。

試してみたら、Cygwin では、setitimer(ITIMER_VIRTUAL, ...) が
機能しないんですね、ITIMER_REAL だと動きました。なるほど。

#include <sys/time.h>
#include <signal.h>

int print_time()
{
    struct timeval t;

    gettimeofday(&t, NULL);
    printf("time = %.2f\n", t.tv_sec + (double)t.tv_usec / 1000000.0);
}

main()
{
    struct itimerval t;
    struct sigaction sa;

    t.it_interval.tv_sec    = 0;
    t.it_interval.tv_usec   = 10 * 1000;
    t.it_value.tv_sec       = 0;
    t.it_value.tv_usec      = 10 * 1000;

    sa.sa_handler = (void(*)(int))print_time;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART;

#if 1
    sigaction(SIGALRM, &sa, NULL);

    setitimer(ITIMER_REAL, &t, NULL);
#else
    sigaction(SIGVTALRM, &sa, NULL);

    setitimer(ITIMER_VIRTUAL, &t, NULL);
#endif

    for (;;) pause();
}

--
新井康司 (Koji Arai)