自定义类似QMutexLocker的CMutexLocker
最近做项目遇到一个需求,有一个buttonSlot()执行要耗点时间,为了防止用户无限制的乱点出现问题,考虑加一个互斥锁,使得每次执行完后才允许执行下一次。大概意思是:
//QMutex m_mutex;是window类的成员变量
void window::buttonSlot()
{
if(m_mutex.islock())
{
return ;
}
m_mutex.lock();
..
...
...
m_mutex.unlock();
}
Qt提供的QMutex和QMutexLocker都没有islock()方法,用bool QMutex::tryLock ()可以实现类似的功能。但是我的
buttonSlot()里有好几个return 语句,要是直接用QMutex,就必须在每个return 之前一一调用unlock(),好麻烦。
所以只好借鉴 QMutexLocker ,但是QMutexLocker 在构造的时候调用的是QMutex::lock ()会卡住,而我不需要卡住
,所以之后自己实现一个类似QMutexLocker 的锁CMutexLocker 。
class CMutexLocker
{
public:
explicit CMutexLocker (QMutex *m)
{
m_isLocked = false;
if (m)
{
m_pLocker = m;
}
}
bool tryLock()
{
if (m_pLocker)
{
m_isLocked = m_pLocker->tryLock();
}
return m_isLocked;
}
bool tryLock( int timeout)
{
if (m_pLocker)
{
m_isLocked = m_pLocker->tryLock(timeout));
}
return m_isLocked;
}
~CMutexLocker ()
{
if (m_pLocker && m_isLocked)
{
m_pLocker->unlock();
}
}
protected:
private:
bool m_isLocked;
QMutex *m_pLocker;
};
只有用起来就简单了:不会卡住等待,也无需在每个return 之前调用unlock()那么麻烦了
void window::buttonSlot()
{
CMutexLocker locker(&m_mutex);
if(!locker.tryLock() )
{
return ;
}
}
http://blog.csdn.net/hai200501019/article/details/17525445
自定义类似QMutexLocker的CMutexLocker的更多相关文章
- 在Eclipse中自定义类似syso的快捷代码模板
sysout/syso syserr/ syse 点击菜单栏的“Window”->“Preferences”,打开“Preferences”对话框.在Preferences”对话框中点击“Jav ...
- Android自定义类似ProgressDialog效果的Dialog
Android自定义类似ProgressDialog效果的Dialog. 方法如下: 1.首先准备两张自己要定义成哪样子的效果的图片和背景图片(也可以不要背景). 如我要的效果: 2.定义loadin ...
- 安卓自定义类似TabHost的导航栏
有时候为了项目需要我们要自定义一些导航控件,类似下面这样. 下面给大家讲讲我是怎么实现的, 1.素材准备(这个都是美工的事情) 2.①资源文件共有五个 如下: activity_main_first. ...
- 自定义类似smarty模板
自定义类封装模板解析功能 原理其实比较简单,就是把html文件解析为一个超级字符串,然后把类似{{$mytitle}}这种结构的变量进行替换(str_replace)当然,实际中这样做可能导致频繁的磁 ...
- 自定义类似MessageBox小窗体操作
1.实际小窗体界面如下 2.代码如下 private void InputBox(string caption,string orderNo) { Form InputForm = new Form( ...
- jquery自定义类似$.ajax()的方法
热腾腾的代码: <script type="text/javascript"> $.extend({ testgogo: function (options) { va ...
- 自定义spring参数注解 - 打破@RequestBody单体限制
本文主要描述怎样自定义类似@RequestBody这样的参数注解来打破@RequestBody的单体限制. 目录1 @RequestBody的单体限制2 自定义spring的参数注解3 编写sprin ...
- UWP开发入门(四)——自定义CommandBar
各位好,再次回到UWP开发入门系列,刚回归可能有些不适应,所以今天我们讲个简单的,自定义CommandBar,说通俗点就是自定义类似AppBarButton的东西,然后扔到CommandBar中使用. ...
- JSP2.2自定义标签、EL函数
简介 JSTL是一个JSP标准标签库,可以解决大部分问题,但是如果我们需要一些更特殊的功能,就需要自定义类似JSTL中标签的标签.如果EL表达式无法满足我们的需求,我们也可以自定义EL函数. tld后 ...
随机推荐
- 跨域引入iframe 自适应高度
最近和别的公司合作一个项目,需要从他们那边引入一个页面,刚开始想的挺简单的,用iframe 引入就好啦,可是操作中才发现,自适应的问题不好解决,试了挺多办法,最终找到一个比较好的方法,记录一下,留着备 ...
- Group By 多个分组集小结 --GROUPING SETS,GROUP BY CUBE,GROUP BY ROLLUP,GROUPING(),GROUPING_ID()
T-SQL 多个分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版 示例数据库下载: http:// ...
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...
- JQuery标签去重与数组去重
如图所示: 代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head ...
- 门面(Facade)模式--医院,保安系统实例
门面(Facade)模式 http://www.cnblogs.com/zhenyulu/articles/55992.html
- 转: 用css把图片转为灰色图
小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...
- grawlew 编译
http://somefuture.iteye.com/blog/2002052 Gradlew behind a proxy systemProp.http.proxyHost=www.someho ...
- cygwin org/apache/zookeeper/KeeperException
以前用cdh3-0.20的hbase,在windows下面直接启动就行了,但是最近安装0.94以上的,就不行了. 报标题的错误,搜遍网络,几乎都是要加HBASE_CLASSPATH的,后来看老外的文章 ...
- IT第十一天、第十二天、第十三天 - 数组的应用、飞行棋游戏的编写和总结
NIIT第十一天 上午 多维数组 1.数组是引用数据类型 排序 1.冒泡排序法 2.类冒泡排序法 下午 飞行棋游戏 1.项目策划 2.项目规则确认 3.项目模块确认 晚上 1.飞行棋游戏,项目框架的编 ...
- poj 1200 Crazy Search(hash)
题目链接:http://poj.org/problem?id=1200 思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的:使用hash可以在常数时间内查找,可以常数时间内判重, ...