看板 C_and_CPP 關於我們 聯絡資訊
寫完上面那篇之後,仔細想想 #1IGT3gmB (C_and_CPP) 好歹也是我寫的, 用那種舊的 alarm() 好像有點掉漆,用新的 timer_ 系列和 nanosleep() 感覺起來就高級很多,而且我把速度調到十倍快,「體感」效能有增加。 $ cat alarm2.c /* https://ideone.com/9tXyDU */ #include <stdio.h> #include <signal.h> #include <string.h> #include <time.h> int n=0; timer_t timerid; void beep(sigval_t sig) { struct itimerspec timeval; printf("%d x %d = %d\n", n/8+2, n%8+2, (n/8+2)*(n%8+2)); n++; if (n>=64) { memset(&timeval, 0, sizeof(timeval)); timer_settime(timerid, 0, &timeval, NULL); } } int main(void) { struct sigevent sigev; struct itimerspec timeval; struct timespec ts; memset(&sigev, 0, sizeof(sigev)); sigev.sigev_notify = SIGEV_THREAD; sigev.sigev_notify_function = beep; timeval.it_interval.tv_sec = 0; timeval.it_interval.tv_nsec = 100000000; timeval.it_value.tv_sec = 0; timeval.it_value.tv_nsec = 100000000; timer_create(CLOCK_MONOTONIC, &sigev, &timerid); timer_settime(timerid, 0, &timeval, NULL); ts.tv_sec = 7; ts.tv_nsec = 0; nanosleep(&ts, NULL); timer_delete(timerid); return 0; } $ gcc -lrt alarm2.c $ ./a.out 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 6 x 7 = 42 6 x 8 = 48 6 x 9 = 54 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 8 x 9 = 72 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81 -- 桃樂絲: 可是, 如果你沒有頭腦, 為什麼會說話? 稻草人: ㄝ, 我也不知... 但是有些人沒有頭腦也能說超~多話呢。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.120.19 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1533235880.A.534.html
Schottky: 其實最大的改進是 timer 和 nanosleep 不會衝突 08/03 03:16
sarafciel: true 08/05 18:14
sarafciel: 修個錯字還推錯orz 08/05 18:14