add source code

This commit is contained in:
2025-09-21 22:25:51 +08:00
parent ff1e5ede8e
commit 5ded4fc5f7
2 changed files with 68 additions and 0 deletions

14
CMakeLists.txt Normal file
View File

@@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.16)
project(sdl-thread LANGUAGES C)
find_package(SDL2 REQUIRED)
add_executable(sdl-thread main.c)
include(GNUInstallDirs)
install(TARGETS sdl-thread
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2)

54
main.c Normal file
View File

@@ -0,0 +1,54 @@
#include <stdio.h>
#include <SDL2/SDL.h>
SDL_mutex *s_lock = NULL;
SDL_cond *s_cond = NULL;
int work_thread(void *arg) {
SDL_LockMutex(s_lock);
printf("<=========work_thread sleep=========>\n");
sleep(10);
printf("<=========work_thread wait condition=========>\n");
SDL_CondWait(s_cond, s_lock);
printf("<=========work_thread receive signal=========>\n");
printf("<=========work_thread end=========>\n");
SDL_UnlockMutex(s_lock);
return 0;
}
#undef main
int main()
{
s_lock = SDL_CreateMutex();
s_cond = SDL_CreateCond();
SDL_Thread *t = SDL_CreateThread(work_thread, "work_thread", NULL);
if (!t) {
printf("SDL_CreateThread() failed\n");
return -1;
}
for (int i = 0; i < 2; i++) {
sleep(2);
printf("main execute\n");
}
printf("SDL_LockMutex(s_lock) before\n");
SDL_LockMutex(s_lock);
printf("SDL_LockMutex(s_lock) after\n");
printf("SDL_CondSignal(s_cond) before\n");
SDL_CondSignal(s_cond);
printf("SDL_CondSignal(s_cond) after\n");
sleep(10);
printf("SDL_UnlockMutex(s_lock) before\n");
SDL_UnlockMutex(s_lock);
printf("SDL_UnlockMutex(s_lock) after\n");
SDL_WaitThread(t, NULL);
SDL_DestroyMutex(s_lock);
SDL_DestroyCond(s_cond);
return 0;
}