下面的代码创建两个线程。一个接受输入,另一个同时打印文本。根据我在该主题上所读的内容,在传统的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/