Создание потока делается через вызов функции SDL_CreateThread(). После успешного возврата из функции ваша функция теперь запущена одновременно с основным приложением в своем контексте задачи (стек, регистры и прочее) и может получать доступ к памяти и открытым файлам используемыми в основном приложении. |
Совет: Второй аргумент для SDL_CreateThread() передается как параметр для порожденного потока. Вы можете использовать его для передачи значений в стек или только как указатель на данные, которые будут использоваться в потоке. |
Пример: #include "SDL_thread.h" int global_data = 0; int thread_func(void *unused){ int last_value = 0; while ( global_data != -1 ) { if ( global_data != last_value ) { printf("Data value changed to %d\n", global_data); last_value = global_data; } SDL_Delay(100); } printf("Thread quitting\n"); return(0);} { SDL_Thread *thread; int i; thread = SDL_CreateThread(thread_func, NULL); if ( thread == NULL ) { fprintf(stderr, "Unable to create thread: %s\n", SDL_GetError()); return; } for ( i=0; i<5; ++i ) { printf("Changing value to %d\n", i); global_data = i; SDL_Delay(1000); } printf("Signaling thread to quit\n"); global_data = -1; SDL_WaitThread(thread, NULL);} |