torturethread.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* Simple test of the SDL threading code */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <signal.h>
  5. #include <string.h>
  6. #include "SDL.h"
  7. #include "SDL_thread.h"
  8. #define NUMTHREADS 10
  9. static char volatile time_for_threads_to_die[NUMTHREADS];
  10. int SubThreadFunc(void *data) {
  11. while(! *(int volatile *)data) {
  12. ; /*SDL_Delay(10); /* do nothing */
  13. }
  14. return 0;
  15. }
  16. int ThreadFunc(void *data) {
  17. SDL_Thread *sub_threads[NUMTHREADS];
  18. int flags[NUMTHREADS];
  19. int i;
  20. int tid = (int ) data;
  21. fprintf(stderr, "Creating Thread %dn", tid);
  22. for(i = 0; i < NUMTHREADS; i++) {
  23. flags[i] = 0;
  24. sub_threads[i] = SDL_CreateThread(SubThreadFunc, &flags[i]);
  25. }
  26. printf("Thread '%d' waiting for signaln", tid);
  27. while(time_for_threads_to_die[tid] != 1) {
  28. ; /* do nothing */
  29. }
  30. printf("Thread '%d' sending signals to subthreadsn", tid);
  31. for(i = 0; i <  NUMTHREADS; i++) {
  32. flags[i] = 1;
  33. SDL_WaitThread(sub_threads[i], NULL);
  34. }
  35. printf("Thread '%d' exiting!n", tid);
  36. return 0;
  37. }
  38. int main(int argc, char *argv[])
  39. {
  40. SDL_Thread *threads[NUMTHREADS];
  41. int i;
  42. /* Load the SDL library */
  43. if ( SDL_Init(0) < 0 ) {
  44. fprintf(stderr, "Couldn't initialize SDL: %sn",SDL_GetError());
  45. exit(1);
  46. }
  47. atexit(SDL_Quit);
  48. signal(SIGSEGV, SIG_DFL);
  49. for(i = 0; i < NUMTHREADS; i++) {
  50. time_for_threads_to_die[i] = 0;
  51. threads[i] = SDL_CreateThread(ThreadFunc, (void *) i);
  52. if ( threads[i] == NULL ) {
  53. fprintf(stderr,
  54. "Couldn't create thread: %sn", SDL_GetError());
  55. exit(1);
  56. }
  57. }
  58. for(i = 0; i < NUMTHREADS; i++) {
  59. time_for_threads_to_die[i] = 1;
  60. }
  61. for(i = NUMTHREADS-1; i >= 0; --i) {
  62. SDL_WaitThread(threads[i], NULL);
  63. }
  64. return(0); /* Never reached */
  65. }