2

您好,我在 Windows XP 中使用 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:

如果 stream 指向一个输出流或更新流,其中没有输入最近的操作,则 fflush 函数会导致该流的任何未写入数据被传递到主机环境以写入文件;否则,行为未定义

于 2012-05-25T11:13:20.957 回答
3

kbhit()弃用,请_kbhit()改用。也许这就是原因。

于 2012-05-25T11:12:52.480 回答