为什么我会遇到运行时错误

时间:2012-05-25 11:01:06

标签: c operating-system pthreads codeblocks

您好我在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);
           }
       }

    }

2 个答案:

答案 0 :(得分:4)

您的程序有未定义的行为 不允许在fflush()上调用stdin,这是未定义的行为。它只允许在标准输出流stdout上调用 这可能是你正在观察的行为的直接原因,也可能不是,但因为它是一个你永远不知道的未定义行为......

C99标准7.19.5.2/2:

  

如果流指向未输入最新操作的输出流或更新流,则fflush功能会将该流的任何未写入数据传送到主机环境以写入该文件;否则,行为未定义

答案 1 :(得分:3)

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