2

こんにちは私はWindowsXPでCode::Blocksを使用しています。このプログラムを実行"drawing operation was attempted when there was no current window". していると、なぜそのようになっているのか知りたいので、実行時エラーが発生します。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <windows.h>
#include <conio.h>
void *print_message_function( void *ptr );

main()
{
   pthread_t thread1, thread2;
   char *message1 = "Thread 1";
   char *message2 = "Thread 2";
   int  iret1, iret2;

   iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
   iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);

   pthread_join( thread1, NULL);
   pthread_join( thread2, NULL);

   printf("Thread 1 returns: %d\n",iret1);
   printf("Thread 2 returns: %d\n",iret2);

   exit(0);
}

void *print_message_function( void *ptr )
{
   char *message;
   char hello;
   for(;;)
   {
        message = (char *) ptr;
        printf("%s \n", message);
        Sleep(1000);
      //  break;


         fflush(stdin);   
/*drawing operation was attempted when there was no current window*/
//The happens from next line onwords
           if(kbhit())
           {
               hello = getchar();
               printf("The interrupt %d", hello);
           }
       }

    }
4

2 に答える 2

4

プログラムの動作は未定義です。
呼び出しは許可fflush()されstdinておらず、未定義の動作です。標準出力ストリームでのみ呼び出すことができますstdout
これは、観察している動作の直接的な理由である場合とそうでない場合がありますが、未定義の動作であるため、決してわかりません...

C99標準7.19.5.2/2:

If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined

于 2012-05-25T11:13:20.957 に答える
3

kbhit()非推奨です_kbhit()代わりに使用してください。おそらくそれが理由でした。

于 2012-05-25T11:12:52.480 に答える