您好我在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);
}
}
}
答案 0 :(得分:4)
您的程序有未定义的行为
不允许在fflush()
上调用stdin
,这是未定义的行为。它只允许在标准输出流stdout
上调用
这可能是你正在观察的行为的直接原因,也可能不是,但因为它是一个你永远不知道的未定义行为......
C99标准7.19.5.2/2:
如果流指向未输入最新操作的输出流或更新流,则fflush功能会将该流的任何未写入数据传送到主机环境以写入该文件;否则,行为未定义
答案 1 :(得分:3)
kbhit()
为deprecated,请改用_kbhit()
。也许这就是原因。