Create threads in detached mode and check if events failed to be
pushed. Stdin thread is still blocking on fread hence the "SOMEWHAT".
... | ... |
@@ -81,8 +81,8 @@ stdin_handler(void *p) |
81 | 81 |
{ |
82 | 82 |
SDL_Event event; |
83 | 83 |
event.type = stdin_event; |
84 |
- while(fread(&event.cbutton.button, 1, 1, stdin) > 0) |
|
85 |
- SDL_PushEvent(&event); |
|
84 |
+ while(fread(&event.cbutton.button, 1, 1, stdin) > 0 && SDL_PushEvent(&event) >= 0) |
|
85 |
+ ; |
|
86 | 86 |
return 0; |
87 | 87 |
(void)p; |
88 | 88 |
} |
... | ... |
@@ -90,18 +90,17 @@ stdin_handler(void *p) |
90 | 90 |
static int |
91 | 91 |
redraw_handler(void *p) |
92 | 92 |
{ |
93 |
- int dropped_frames = 0; |
|
93 |
+ int dropped_frames = 0, stop = 0; |
|
94 | 94 |
SDL_Event event, interrupt; |
95 | 95 |
event.type = redraw_event; |
96 | 96 |
interrupt.type = interrupt_event; |
97 |
- for(;;) { |
|
97 |
+ while(!stop) { |
|
98 | 98 |
SDL_Delay(16); |
99 | 99 |
if(SDL_HasEvent(redraw_event) == SDL_FALSE) { |
100 |
- SDL_PushEvent(&event); |
|
100 |
+ stop = SDL_PushEvent(&event) < 0; |
|
101 | 101 |
dropped_frames = 0; |
102 |
- } |
|
103 |
- else if(++dropped_frames == TIMEOUT_FRAMES) { |
|
104 |
- SDL_PushEvent(&interrupt); |
|
102 |
+ } else if(++dropped_frames == TIMEOUT_FRAMES) { |
|
103 |
+ stop = SDL_PushEvent(&interrupt) < 0; |
|
105 | 104 |
} |
106 | 105 |
} |
107 | 106 |
return 0; |
... | ... |
@@ -178,8 +177,8 @@ init(void) |
178 | 177 |
audio0_event = SDL_RegisterEvents(POLYPHONY); |
179 | 178 |
redraw_event = SDL_RegisterEvents(1); |
180 | 179 |
interrupt_event = SDL_RegisterEvents(1); |
181 |
- SDL_CreateThread(stdin_handler, "stdin", NULL); |
|
182 |
- SDL_CreateThread(redraw_handler, "redraw", NULL); |
|
180 |
+ SDL_DetachThread(SDL_CreateThread(stdin_handler, "stdin", NULL)); |
|
181 |
+ SDL_DetachThread(SDL_CreateThread(redraw_handler, "redraw", NULL)); |
|
183 | 182 |
SDL_StartTextInput(); |
184 | 183 |
SDL_ShowCursor(SDL_DISABLE); |
185 | 184 |
SDL_EventState(SDL_DROPFILE, SDL_ENABLE); |