timer_test.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1996. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. /* timer_test is supposed to demonstrate that window system
  6.    event related callbacks (like the keyboard callback) do not
  7.    "starve out" the dispatching of timer callbacks.  Run this
  8.    program and hold down the space bar.  The correct behavior
  9.    (assuming the system does autorepeat) is interleaved "key is 
  10.    32" and "timer called" messages.  If you don't see "timer
  11.    called" messages, that's a problem.  This problem exists in
  12.    GLUT implementations through GLUT 3.2. */
  13. #include <stdlib.h>
  14. #include <stdio.h>
  15. #ifdef _WIN32
  16. #include <windows.h>
  17. #define sleep(x) Sleep(1000 * x)
  18. #else
  19. #include <unistd.h>
  20. #endif
  21. #include <GL/glut.h>
  22. void
  23. display(void)
  24. {
  25.   glClear(GL_COLOR_BUFFER_BIT);
  26.   glFlush();
  27. }
  28. /* ARGSUSED */
  29. void
  30. timer(int value)
  31. {
  32.   printf("timer calledn");
  33.   glutTimerFunc(500, timer, 0);
  34. }
  35. /* ARGSUSED1 */
  36. void
  37. keyboard(unsigned char k, int x, int y)
  38. {
  39.   static int beenhere = 0;
  40.   if (!beenhere) {
  41.     glutTimerFunc(500, timer, 0);
  42.     beenhere = 1;
  43.   }
  44.   printf("key is %dn", k);
  45.   sleep(1);
  46. }
  47. int
  48. main(int argc, char **argv)
  49. {
  50.   glutInit(&argc, argv);
  51.   glutCreateWindow("timer test");
  52.   glClearColor(0.49, 0.62, 0.75, 0.0);
  53.   glutDisplayFunc(display);
  54.   glutKeyboardFunc(keyboard);
  55.   glutMainLoop();
  56.   return 0;             /* ANSI C requires main to return int. */
  57. }