我正在尝试实现一个控制信号,它为矩阵的每个元素添加一个值,并随着变化打印整个矩阵。
基本上,我通过在矩阵的第一个元素 ( matrix[0][0]
) 中添加 1 来模拟这一点,然后控制信号将在矩阵的每个元素中添加 1,然后打印它。
问题是,它应该每秒打印 32 个矩阵,并进行 32 次更改。如下所示:
1 0 0
0 0 0
0 0 0
1 1 0
0 0 0
0 0 0
1 1 1
0 0 0
0 0 0
... 等等。
首先,我尝试使用 3x3 矩阵,它每秒正确打印 9 个矩阵。但是当我尝试将其更改为 32x32 时,打印将近 10 个矩阵需要 3-4 秒,因此速度要慢得多。
这是我的代码:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
int matrix[3][3] = {0};
int row=0;
int col=0;
int i, j, k, l;
int seccount = 0;
void value_changer();
static void catch_signal(int signal)
{
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
if(i==0 && j==0)
{
//continue;
for(k=0; k<3; k++)
{
for(l=0; l<3; l++)
{
printf("%d ", matrix[k][l]);
}
printf("\n");
}
printf("\n");
}
else
{
matrix[i][j] += 1;
for(k=0; k<3; k++)
{
for(l=0; l<3; l++)
{
printf("%d ", matrix[k][l]);
}
printf("\n");
}
printf("\n");
}
}
}
}
void value_changer()
{
matrix[0][0] += 1;
raise(SIGINT);
printf("***************** Seconds: %d ********************\n",seccount++);
}
int main()
{
//value_changer();
if (signal(SIGINT, catch_signal) == SIG_ERR)
{
fputs("An error occurred while setting a signal handler.\n", stderr);
return EXIT_FAILURE;
}
puts("Raising the signal.");
while(1)
{
//raise(SIGINT);
value_changer();
sleep(1);
}
return 0;
}
首先,我这样做是正确的还是遗漏了什么?第二,这个控制信号是否正确?第三,是否有任何其他(更好和更有效)的方式来执行上述操作?
注意:给定程序是每秒 3x3 矩阵和 9 个矩阵,带有控制信号。