아래 코드는 두 개의 스레드를 만듭니다. 하나는 입력을 허용하고 다른 하나는 텍스트를 동시에 인쇄합니다. 주제에서 읽은 것부터 글로벌 변수는 전통적인 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;
}
}
}
'void *'에 캐스팅했는지 확인하십시오. 그렇지 않으면 컴파일되지 않습니다. C++에서는'void *'에 대한 암시 적 캐스팅이 없습니다. –
아니요. 포인터는 암시 적으로'void *'(C++ 표준 §4.10.2). 'void *'에서'T *'로의 변환은 실제로 C++에서는 불법이고 C에서는 유효합니다. – n0rd
네,하지만'void *'에서'T *'로 넘어 가지 않으면'T *'에서 'void *'는 암시 적으로 허용되지 않습니다. 그래서'malloc'의 반환 값을 캐스팅해야합니다. –