Wiki Page Content

Differences between revisions 27 and 28
Revision 27 as of 2017-03-11 22:47:30
Size: 2948
Comment: Fixed includes and comments in example.
Revision 28 as of 2019-01-21 19:12:12
Size: 2944
Editor: haxpor
Comment: make it consistent in coding style comparing to other code example in sdl documentation. Notice \n changed to be at the end.
Deletions are marked like this. Additions are marked like this.
Line 36: Line 36:
        printf("\nThread counter: %d", cnt);         printf("Thread counter: %d\n", cnt);
Line 48: Line 48:
    printf("\nSimple SDL_CreateThread test:");     printf("Simple SDL_CreateThread test:\n");
Line 54: Line 54:
        printf("\nSDL_CreateThread failed: %s\n", SDL_GetError());         printf("SDL_CreateThread failed: %s\n", SDL_GetError());
Line 57: Line 57:
        printf("\nThread returned value: %d", threadReturnValue);         printf("Thread returned value: %d\n", threadReturnValue);
Line 65: Line 65:

SDL_CreateThread

Use this function to create a new thread.

Syntax

SDL_Thread* SDL_CreateThread(SDL_ThreadFunction fn,
                             const char*        name,
                             void*              data)

Function Parameters

fn

the function to call in the new thread; see Remarks for details

name

the name of the thread; see Remarks for details

data

a pointer that is passed to fn

Return Value

Returns an opaque pointer to the new thread object on success, NULL if the new thread could not be created; call SDL_GetError() for more information.

Code Examples

#include <stdio.h>
#include "SDL.h"

/* Very simple thread - counts 0 to 9 delaying 50ms between increments */
static int TestThread(void *ptr)
{
    int cnt;

    for (cnt = 0; cnt < 10; ++cnt) {
        printf("Thread counter: %d\n", cnt);
        SDL_Delay(50);
    }

    return cnt;
}

int main(int argc, char *argv[])
{
    SDL_Thread *thread;
    int         threadReturnValue;

    printf("Simple SDL_CreateThread test:\n");

    /* Simply create a thread */
    thread = SDL_CreateThread(TestThread, "TestThread", (void *)NULL);

    if (NULL == thread) {
        printf("SDL_CreateThread failed: %s\n", SDL_GetError());
    } else {
        SDL_WaitThread(thread, &threadReturnValue);
        printf("Thread returned value: %d\n", threadReturnValue);
    }

    return 0;
}

Output:
Simple SDL_CreateThread test:
Thread counter: 0
Thread counter: 1
Thread counter: 2
Thread counter: 3
Thread counter: 4
Thread counter: 5
Thread counter: 6
Thread counter: 7
Thread counter: 8
Thread counter: 9
Thread returned value: 10

Remarks

SDL_CreateThread() creates a new thread of execution that shares all of its parent's global memory, signal handlers, file descriptors, etc, and runs the function fn, passing it the void pointer data. The thread quits when fn returns.

The function prototype for fn is:

int SDL_ThreadFunction(void* data)
  • where its parameter is:

There are no requirements for thread naming conventions, so long as the string is null-terminated UTF-8, but these guidelines are helpful in choosing a name:

If a system imposes requirements, SDL will try to munge the string for it (truncate, etc), but the original string contents will be available from SDL_GetThreadName().


CategoryAPI, CategoryThread

None: SDL_CreateThread (last edited 2019-01-21 19:12:12 by haxpor)

Feedback
Please include your contact information if you'd like to receive a reply.
Submit