使用控制信号每秒打印32个不同的32x32矩阵

时间:2013-04-16 05:35:35

标签: c

我正在尝试实现一个控制信号,该信号为矩阵的每个元素添加一个值,并随着变化打印整个矩阵。

基本上,我通过在矩阵的第一个元素(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矩阵的控制信号。

1 个答案:

答案 0 :(得分:0)

到终端的输出很慢。我建议你在内存中创建数据并进行单个输出操作。我还建议你构造数据之外的信号处理程序,只在那里做输出。


char buffer[4096];

static void catch_signal(int)
{
    printf(buffer);
}

void value_changer(void)
{
    char temp[32];

    /* "Reset" buffer */
    buffer[0] = '\0';

    /* Do whatever "output" operations needed */
    for (int i = 0; i < sizeof(matrix) / sizeof(matrix[0]); i++)
    {
        for (int j = 0; j < sizeof(matrix[i]) / sizeof(matrix[i][0]); j++)
        {
            snprintf(temp, sizeof(temp) - 1, "%d ", matrix[i][j]);
            strcat(buffer, temp);
        }
        strcat(buffer, "\n");
    }

    /* Do the other stuff */
    /* ... */
}