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);

SDL封装的系统操作(转载)的更多相关文章

  1. windows系统操作类和演示程序(关机,关闭显示器,打开屏幕保护程序,打开光驱等)

    /// <summary> /// 系统控制类,关机,关闭显示器,打开屏幕保存程序等 /// </summary> public class SystemPowerContro ...

  2. 【Cocos2d-x Lua】数据库封装类型的操作

    Lua数据库封装类型的操作 使用演示样例 lua代码: require("DB") -- 保存一个字符串(数据库中存储的数据都是以字符串的形式保存的) DB:getInstance ...

  3. 安卓自定义View进阶-Canvas之画布操作 转载

    安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...

  4. 基于SqlSugar的开发框架循序渐进介绍(8)-- 在基类函数封装实现用户操作日志记录

    在我们对数据进行重要修改调整的时候,往往需要跟踪记录好用户操作日志.一般来说,如对重要表记录的插入.修改.删除都需要记录下来,由于用户操作日志会带来一定的额外消耗,因此我们通过配置的方式来决定记录那些 ...

  5. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  6. SqlServer中的merge操作(转载)

    SqlServer中的merge操作(转载)   今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有 ...

  7. 36.Node.js 工具模块--OS模块系统操作

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模 ...

  8. 用虚拟机封装win10系统的一些记录

    想用虚拟机封装一个WIN10企业LTSC,期间参考了IT天空小鱼儿的几大步骤一直到手动优化完,后面就自己用系统安装直接备份了一个.gho镜像.期间出过好多毛病,不过总算是成功实现了.注意点: 1.前面 ...

  9. 封装win7系统、制作win7GHO镜像、制作一个自定义的镜像文件具体步骤、制作Win10镜像gho

    作者:导演你让灰太狼吃只羊 来源:CSDN 原文:https://blog.csdn.net/qq_35057426/article/details/83015516 版权声明:本文为博主原创文章,转 ...

随机推荐

  1. Milk Patterns POJ - 3261(后缀数组+二分)

    题意: 求可重叠的最长重复子串,但有一个限制条件..要至少重复k次 解析: 二分枚举k,对于连续的height 如果height[i] >= k 说明它们至少有k个元素是重复的,所以判断一下就好 ...

  2. 【刷题】BZOJ 2594 [Wc2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  3. 【LOJ2541】【PKUWC2018】猎人杀(容斥,FFT)

    [LOJ2541][PKUWC2018]猎人杀(容斥,FFT) 题面 LOJ 题解 这题好神仙啊. 直接考虑概率很麻烦,因为分母总是在变化. 但是,如果一个人死亡之后,我们不让他离场,假装给他打一个标 ...

  4. CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)

    CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先) 题意分析 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天, ...

  5. 关于[x/y]一些小想法

    [x/y],即x除以y下取整 (不会LATEX) 1.对于给定的x,对于所有的1<=y<=x, [x/y]一共有√x种取值. 证明: 对于y<=√x,y有根号种,所以值最多根号种.对 ...

  6. ASP.NET MVC3 入门指南之数据验证[源码RAR下载]

    http://www.cnblogs.com/BingoLee/archive/2011/12/23/2298822.html 前言: 无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...

  7. SQL联合查询中的关键语法

    http://www.cnblogs.com/aaapeng/archive/2010/01/20/1652151.html 联合查询效率较高.以下例子来说明联合查询的好处 t1表结构(用户名,密码) ...

  8. java中的date类型转换为js中的日期显示 我改

    function dateChange(javaDate){ if(javaDate){ return javaDate.substr(0,10).replace(/-/g,"/" ...

  9. jsp中的js中获取项目路径的方法

    在jsp中加上 <% String path = request.getContextPath(); String basePath = request.getScheme()+":/ ...

  10. poj 3415 后缀数组 两个字符串中长度不小于 k 的公共子串的个数

    Common Substrings Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11469   Accepted: 379 ...