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.判断系统的字节序

  #include "SDL_endian.h"
  定义在宏上SDL_BYTEORDER ,如果是小端字节序则等于SDL_LIL_ENDIAN
,大端字节序是SDL_BIG_ENDIAN

5.信号量

    采用SDL_sem结构,操作跟Posix 信号量一致

    SDL_sem * SDL_CreateSemaphore(Uint32 initial_value);#创建信号量

    void  SDL_DestroySemaphore(SDL_sem *sem); #销毁信号量

    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);
posted @ 2016-08-05 09:00  山里来的倒霉熊  阅读(610)  评论(0编辑  收藏  举报