下面的代码创建两个线程。一个接受输入,另一个同时打印文本。根据我在该主题上所读的内容,在传统的c ++代码中,全局变量被认为是错误的形式。但是,我想不出一种没有它们就可以同时进行输入/输出的方法。

如何从代码中消除这两个布尔全局变量?

bool input_done = 1;
bool output_done = 1;

void* input(void* ptr)
{
    char msg[256];
    cin.getline(msg,256);
    cout << msg << endl;
    input_done = 1;
    pthread_exit(NULL);
}
void* output(void* ptr)
{
    cout << "Hello World" << endl;
    for(long int x=0;x<1000000000;x++) {}
    output_done = 1;
    pthread_exit(NULL);
}

int main()
{
    while(1)
    {

        pthread_t t1,t2;
        if (input_done)
        {
            pthread_create(&t1,NULL,input,NULL);
            input_done = 0;
        }
        if (output_done)
        {
            pthread_create(&t2,NULL,output,NULL);
            output_done = 0;
        }
    }

}

最佳答案

有些指针传递给您不使用的线程函数。将指针传递给变量,然后通过这些指针访问它们,然后就可以在函数main或其他任何位置的堆栈上分配变量。

因此,例如您的output函数看起来像

void* output(void* output_done)
{
    cout << "Hello World" << endl;
    for(long int x=0;x<1000000000;x++) {}
    *((bool*)output_done) = 1;
    pthread_exit(NULL);
}


pthread_create调用:

int main()
{
    bool output_done = 1;

    // ...

    if (output_done)
    {
        pthread_create(&t2,NULL,output, &output_done);
        output_done = 0;
    }

关于c++ - 如何消除此代码中的全局变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8885684/

10-11 22:23
查看更多