以下のコードは2つのスレッドを作成します。 1つは入力を受け入れ、もう1つはテキストを同時に印刷する。私がこのトピックで読んだことから、グローバル変数は伝統的なC++コードでは悪いフォームとみなされます。しかし、私はそれらなしで入出力を同時に行う方法を考えることはできません。このコードでグローバル変数を削除するにはどうすればよいですか?
私はこれら2つのブール値のグローバル変数をコードから削除するにはどうすればよいですか?
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'の戻り値をキャストしなければならない理由です。 –