|
Size: 2161
Comment: Added missing thread name for SDL_CreateThread() in example.
|
Size: 2674
Comment: Improved remarks
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 66: | Line 66: |
| The return code for the thread function is placed in the area pointed to by '''status''', if '''status''' is not NULL. The return code is the value returned by the 'return' statement in the thread function. | Wait for a thread to finish. Threads that haven't been detached will remain (as a "zombie") until this function cleans them up. Not doing so is a resource leak. Once a thread has been cleaned up through this function, the [[SDL_Thread]] that references it becomes invalid and should not be referenced again. As such, only one thread may call SDL_WaitThread() on another. The return code for the thread function is placed in the area pointed to by '''status''', if '''status''' is not NULL. You may not wait on a thread that has been used in a call to SDL_DetachThread(). Use either that function or this one, but not both, or behavior is undefined. It is safe to pass NULL to this function; it is a no-op. |
SDL_WaitThread
Use this function to wait for a thread to finish.
Syntax
void SDL_WaitThread(SDL_Thread* thread,
int* status)
Function Parameters
thread |
the SDL_Thread pointer that was returned from the SDL_CreateThread() call that started this thread |
status |
pointer to an integer that will receive the value returned from the thread function by its 'return', see Remarks for details |
Code Examples
#include <stdio.h>
#include <SDL_thread.h>
#include <SDL_timer.h>
int TestThread(void *ptr);
int main(int argc, char *argv[])
{
SDL_Thread *thread;
int threadReturnValue;
printf("\nSimple SDL_CreateThread test:");
// Simply create a thread
thread = SDL_CreateThread(TestThread, "TestThread", (void *)NULL);
if (NULL == thread) {
printf("\nSDL_CreateThread failed: %s\n", SDL_GetError());
} else {
// Wait for the thread to complete. The thread functions return code will
// be placed in the "threadReturnValue" variable when it completes.
//
SDL_WaitThread(thread, &threadReturnValue);
printf("\nThread returned value:%d", threadReturnValue);
}
return 1;
}
// Very simple thread - counts 0 to 9 delaying 50ms between increments
int TestThread(void *ptr)
{
int cnt;
for (cnt = 0; cnt < 10; cnt++) {
printf("\nThread counter: %d", cnt);
SDL_Delay(50);
}
// Return the final value to the SDL_WaitThread function above
return cnt;
}
Remarks
Wait for a thread to finish. Threads that haven't been detached will remain (as a "zombie") until this function cleans them up. Not doing so is a resource leak.
Once a thread has been cleaned up through this function, the SDL_Thread that references it becomes invalid and should not be referenced again. As such, only one thread may call SDL_WaitThread() on another.
The return code for the thread function is placed in the area pointed to by status, if status is not NULL.
You may not wait on a thread that has been used in a call to SDL_DetachThread(). Use either that function or this one, but not both, or behavior is undefined.
It is safe to pass NULL to this function; it is a no-op.
Note that the thread pointer is freed by this function and is not valid afterward.
