Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1644441
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: C/C++

2010-08-21 01:22:44

Andrew Haung
 
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);
阅读(2158) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-24 14:51:59

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com