zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    svn提交代码出错
    正则表达式小试
    基于AT91RM9200的ARM Linux的移植方法
    Byte、bit、bps、位、字、字节/包 ,报文,帧
    时间片调度在单片机中的运用
    单片机计数器T0作定时技术(记时器设计)
    fastboot 烧写内核
    菜鸟吧网站
    理解单片机中的计数器和定时器
    svn命令总结(原创)
  • 原文地址:https://www.cnblogs.com/tan2016/p/5739904.html
Copyright © 2011-2022 走看看