Re: [问题] 九九乘法表不用循环是叫我直接从1列到81?

楼主: Schottky (顺风相送)   2018-08-03 02:51:15
写完上面那篇之后,仔细想想 #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
楼主: Schottky (顺风相送)   2018-08-03 03:16:00
其实最大的改进是 timer 和 nanosleep 不会冲突
作者: sarafciel (Cattuz)   2018-08-05 18:14:00
true修个错字还推错orz

Links booklink

Contact Us: admin [ a t ] ucptt.com