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. 51nod 1494 选举拉票 | 线段树

    51nod1494 选举拉票 题面 现在你要竞选一个县的县长.你去对每一个选民进行了调查.你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你.现在你想要花最少的钱使得你当上县长.你当选的条 ...

  2. 【bzoj2555】 SubString

    http://www.lydsy.com/JudgeOnline/problem.php?id=2555 (题目链接) 题意 给出一个初始串,维护两个操作.在原串后面加入一个字符串:询问某个字符串在原 ...

  3. BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 )

    BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 ) 题意分析 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 ...

  4. WEB入门.九 导航菜单

    学习内容 水平导航菜单 垂直导航菜单 下拉式导航菜单 能力目标 制作tab标签导航菜单 制作带箭头的导航菜单 制作带信息提示的导航菜单 制作垂直下拉导航菜单 制作水平下拉导航菜单 本章简介 上一章节中 ...

  5. Jenkins(四)---Jenkins添加密钥对

    一.添加密钥 1.添加git用户和git密码对 ,用于git客户端从gitlab上拉取代码到本地 /** lihaibo 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原 ...

  6. 二、Linux学习之centOS的的setup

    因为我是在VMware上安装的centOS,网络设置选择的是桥接模式,这样可以和实体机使用同样的网络,但是也使用同样的IP,因此就需要设置一下IP了,否则使用ifconfig查询ip的时候显示的是12 ...

  7. Kubernetes PV/PVC使用实践

    转载于https://www.cnblogs.com/ericnie/p/7733281.html   pv,pvc的概念不解释了,之前在registry中已经使用过PV和PVC,现在想把WebLog ...

  8. Docker应用二:docker常用命令介绍

     Docker常用命令使用介绍 docker中常用的命令: 1.docker search image_name:搜查镜像 2.docker pull image_name:从镜像库中拉去镜像 3.d ...

  9. 线性回归,感知机,逻辑回归(GD,SGD)

    线性回归 线性回归是一个回归问题,即用一条线去拟合训练数据 线性回归的模型: 通过训练数据学习一个特征的线性组合,以此作为预测函数. 训练目标:根据训练数据学习参数(w1,w2, ... , wn,b ...

  10. OpenStack 认证服务 KeyStone部署(三)

    Keystone 介绍 Keystone作用: 用户与认证:用户权限与用户行为跟踪: 服务目录:提供一个服务目录,包括所有服务项和相关Api的断点 SOA相关知识 Keystone主要两大功能用户认证 ...