多线程条件变量应用例子

Input_manager.h

InputOpr 结构体添加

进程 ID :pthread_t t_TreadID;

int AllInputDevicesInit(void)
{PT_InputOpr ptTmp = g_ptInputOprHead;int iError = -1;while (ptTmp){if (0 == ptTmp->DeviceInit()){/* 创建子线程 */pthread_create(&ptTmp->t_TreadID, NULL,InputEventThreadFunction, ptTmp->GetInputEvent);/* 最后一个参数是给 InputEventThreadFunction用的*/iError = 0;}ptTmp = ptTmp->ptNext;}return iError;
}

/* 线程函数 */
static void* InputEventThreadFunction(void *pVoid)
{T_InputEvent tInputEvent;/* 定义函数指针 */int (*GetInputEvent)(PT_InputEvent ptInputEvent);/* 让这个函数指针指向 输入参数*/GetInputEvent = (int (*)(PT_InputEvent))pVoid;while(1){if(0 == GetInputEvent(&tInputEvent)){/* 有数据变化,唤醒主进程,把tInputEvent的值传给一个全局变量 *//* 访问临界资源前先获得互斥变量 */pthread_mutex_lock(&g_tmutex);/* 原子方法赋值 */g_tInputEvent = tInputEvent;/* 唤醒主线程 */pthread_cond_signal(&g_tcondvar);/* 释放互斥变量 */pthread_mutex_unlock(&g_tmutex);}}return NULL;}

int GetInputEvent(PT_InputEvent ptInputEvent)
{/* 休眠 */pthread_mutex_lock(&g_tmutex);/* 条件等待函数 */pthread_cond_wait(&g_tcondvar, &g_tmutex);/* 程序能够向下继续证明被唤醒啦 *//* 被唤醒之后返回数据 */*ptInputEvent = g_tInputEvent;pthread_mutex_unlock(&g_tmutex);return 0;
}

Makefile 添加线程库 –lpthread

LDFLAGS := -lm -lfreetype -lts –lpthread

g_tTSDev = ts_open(pcTSName, 0);  /* 以阻塞方式打开 */

其实就是两个输入方式都以循环方式等待有数据变化,然后唤醒主线程处理

改为滑动翻页

只需修改一个函数即可

static int TouchScreenGetInputEvent(PT_InputEvent ptInputEvent)
{struct ts_sample tSamp;struct ts_sample tSampPressed;struct ts_sample tSampReleased;int iRet;int bStart = 0;int iDelta;static struct timeval tPreTime;while(1){iRet = ts_read(g_tTSDev, &tSamp, 1); /* 如果无数据则休眠 */if(1 == iRet){if ((tSamp.pressure > 0) && (bStart == 0)){tSampPressed = tSamp;bStart = 1;}if (tSamp.pressure <= 0){tSampReleased = tSamp;//bStart = 0;/* 处理数据 */if(!bStart){return -1;}else{iDelta = tSampReleased.x - tSampPressed.x;ptInputEvent->tTime = tSampReleased.tv;ptInputEvent->iType = INPUT_TYPE_TOUCHSCREEN;if (iDelta > giXres/5){/* 翻到上一页 */ ptInputEvent->iVal = INPUT_VALUE_UP;}else if (iDelta < 0 - giXres/5){/* 翻到下一页 */ptInputEvent->iVal = INPUT_VALUE_DOWN;}else{ptInputEvent->iVal = INPUT_VALUE_UNKNOWN;}return 0;}}    }else{return -1;}}return 0;
}

转载于:https://www.cnblogs.com/CZM-/p/5367565.html

5.3多线程条件变量相关推荐

  1. linux多进程条件变量,Linux 多线程条件变量同步

    条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作.条件变量使用的条件本身是需要使用互斥量进行保护的 ...

  2. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  3. 219-C++多线程(条件变量)

    操作1(不加线程) 操作2(引入多线程) 打印的结果不是我们想要的! 这里造成结果混乱的原因是什么? 原因是: 并发执行,多线程抢占资源. 这是一种异步执行方案.当我们程序链接编译通过之后,我们从主函 ...

  4. 多线程条件变量(pthread_cond_wait)用法

    条件变量是利用线程间共享得全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起:另一个线程使"条件成立"给出条件成立信号.为了 ...

  5. 多线程---条件变量

    互斥器和条件变量的区别:互斥器具有加锁原语,用来进行排他性的访问共享数据,而条件变量具有等待原语,用于等待某个事件的发生. 等待条件变量的正确姿势: void wait() {mutex.lock() ...

  6. linux 多线程条件变量,linux多线程之条件变量

    假设有共享的资源sum,与之相关联的mutex 是lock_s.假设每个线程对sum的操作很简单的,与sum的状态无关,比如只是sum++.那么只用mutex足够了.程序员只要确保每个线程操作前,取得 ...

  7. Java线程:新特征-条件变量(转)

    条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义. 这里的条件和 ...

  8. Java线程详解(16)-条件变量

    条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义. 这里的条件和 ...

  9. 【C++】多线程互斥锁、条件变量

    我们了解互斥量和条件变量之前,我们先来看一下为什么要有互斥量和条件变量这两个东西,了解为什么有这两东西之后,理解起来后面的东西就简单很多了!!! 先来看下面这段简单的代码: int g_num = 0 ...

最新文章

  1. 90后清华女孩:博二开始研究世界级难题,3年发5篇Science,现入选中国榜“35岁以下科技创新35人”!...
  2. devexpress表格控件gridcontrol实现纵向标头
  3. mysql kafka binlog_为什么使用kafka处理mysql binlog?
  4. 笔记本上的小键盘计算机怎样用,笔记本数字小键盘不能用怎么办【解决方法】...
  5. Linux基础学习十:Linux的权限管理
  6. 程序员,你总要有点自己的想法吧!
  7. WIFI限制敏感网页_秒杀同类“付费投屏”软件,完全免费无限制
  8. 2017php最新版本,2017php受权验证系统2.6.8受权系统,真正完整可用,全新界面受权源码...
  9. 功不唐捐—— 程序员职场第一课 后记
  10. Windows 微信3.3.0内测如何申请,附报名及下载地址
  11. kptr_restrict 向用户空间内核中的指针(/proc/kallsyms-modules显示value全部为0)
  12. 辅助 已禁用 ft 55%_如何禁用Windows 10的烦人的焦点辅助通知
  13. 厉害|百度28位离职技术大牛和他们创建的AI公司!
  14. 如何看待人工智能的现状
  15. ## YARN运行资源配置
  16. 数字和字符的对照关系表(编码表)
  17. 那些年啊,那些事——一个程序员的奋斗史 ——48
  18. 蓝屏的硬件原因及解决
  19. Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2) -29
  20. Vue上传图片并展示

热门文章

  1. 操作系统机制学习总结
  2. 学习旧岛小程序 (5) observer 函数中修改属性的值
  3. 《如何阅读一本书》之 阅读的层次
  4. 缺陷漏测分析:测试过程改进
  5. android事件分发笔记
  6. 01 MySQL锁概述
  7. [题解]BZOJ1004 序列函数
  8. Google搜索技巧-从入门到精通(从此学习进步、工作顺心)
  9. 计算勒让德多项式的系数
  10. C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比