SDL封裝的系統操做(轉載)

Andrew Haung bluedrum@163.com數據結構

SDL封裝不少操做系統的功能,爲了保證SDL程序可移植性,最好儘可能用這一些封裝函數,哪果沒有的話,才使用各類操做本地函數。
 對於如何封各個操做系統的功能,
1.延時函數:
   void SDL_Delay(Uint32 ms); #以微秒單位,最小爲10ms.
2.取系統運行時間:
  Uint32 SDL_GetTicks(void); #返回微秒數
3.線程
   它使用SDL_Thread數據結構.它使用接近於POSIX Thead 接口,
   它使用SDL_CreateThread()建立線程
   等待某一個線程退出 SDL_WaitThread();
   殺列一個線程  SDL_KillThread();
 

#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);
}
函數

4.判斷系統的字節序post

  #include "SDL_endian.h"
  定義在宏上SDL_BYTEORDER ,若是是小端字節序則等於SDL_LIL_ENDIAN
,大端字節序是SDL_BIG_ENDIANui

5.信號量spa

    採用SDL_sem結構,操做跟Posix 信號量一致操作系統

    SDL_sem * SDL_CreateSemaphore(Uint32 initial_value);#建立信號量線程

    void  SDL_DestroySemaphore(SDL_sem *sem); #銷燬信號量code

    int SDLCALL SDL_SemWait(SDL_sem *sem);  #相似於sem_wait()接口

    int  SDL_SemTryWait(SDL_sem *sem);#相似於 sem_trywait();事件

     int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 ms);#相似於sem_timedwait();

   int  SDL_SemPost(SDL_sem *sem); #至關於sem_post;

6.互斥鎖SDL_Mutex

  它的原型相似於 pthread_mutex.採用用於加鎖,即是由信號量的實現的。

     SDL_mutex * SDLCALL SDL_CreateMutex(void);建立互斥量

      SDL_LockMutex(m); //加鎖

      SDL_UnlockMutex(m);//解鎖

     void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex);銷燬互斥量

5

7.條件變量

   SDL_cond :原型相似pthread_cond_t.用於事件同步

   SDL_cond *  SDL_CreateCond(void); #建立條件變量

    void SDL_DestroyCond(SDL_cond *cond); #關閉條件變量

     int SDL_CondSignal(SDL_cond *cond);#通知條件成立,相似於pthread_cond_signal()

    int  SDL_CondBroadcast(SDL_cond *cond); #通知條件相似於 pthread_cond_broadcast();一次性通知全部阻塞條件

    int SDLCALL SDL_CondWait(SDL_cond *cond, SDL_mutex *mut);#相似於pthread_cond_wait();

8.定時器
   int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback);
相關文章
相關標籤/搜索