C++11实现自旋锁
学习C++11的多线程已经有一段时间了,所以打算整理记录下来,分成五篇文章:
一、标准库的线程封装类Thread和Future
二、互斥对象(Mutex)和锁(Lock)
三、条件变量(Condition Variable)
四、原子操作(Atomic Operation)
五、内存序(Memory Order)
线程(Thread)是程序中独立执行的指令流,通常是系统调度的基本单位。含有两个或两个以上线程的程序就称为多线程程序,在硬件允许的情况下多个线程可以彼此独立的并行执行。在许多情况下都需要使用多线程,比如:
Unicode是计算机领域的一项行业标准,它对世界上绝大部分的文字的进行整理和统一编码,Unicode的编码空间可以划分为17个平面(plane),每个平面包含2的16次方(65536)个码位。17个平面的码位可表示为从U+0000到U+10FFFF,共计1114112个码位,第一个平面称为基本多语言平面(Basic Multilingual Plane, BMP),或称第零平面(Plane 0)。其他平面称为辅助平面(Supplementary Planes)。基本多语言平面内,从U+D800到U+DFFF之间的码位区段是永久保留不映射到Unicode字符,所以有效码位为1112064个。最新的版本是Unicode 6.3发布于2013年9月30日。
对于被Unicode收录的字符其编码是唯一且确定的。但是Unicode的实现方式(出于传输、存储、处理或向后兼容的考虑)却有不同的几种,其中最流行的是UTF-8、UTF-16、UCS2、UCS4/UTF-32等,细分的话还有大小端的区别。
抱歉,不再提供在线转换服务。
示例链接:
使用说明:
并不是任何http链接都可以转换成qvod链接,只有形如http://host[:port]/file_size/http_hash/file_name的链接才能转换。将快播的http链接输入上方的文本区域,每行一条链接,支持批量转换,点击下方的转换按钮即可完成转换。
抱歉,不再提供在线转换服务。
示例链接:
使用说明:
将qvod链接或bdhd链接输入入上方的文本区域,每行一条链接,支持批量转换,支持qvod和bdhd混合转换,点击下方的转换按钮即可完成转换。
微软在这周发布了Visual C++ Nov 2013 CTP,包含了下面这些C++11、C++14和C++/CX新特性:
在C++03中default关键字用于在switch语句中声明default case。在C++11中增加了让编译器为类生成默认构造函数、移动构造函数、赋值操作符、移动操作符和析构函数的功能。
比如在C++11中可以这样声明一个wrapper类
.srt是一种非常流行的基于文本行格式的字幕文件。一个简单的字幕文件的内容如下(本文不考虑字幕有多行的情况):
1 | 1 |
其内容包括序号,开始时间和结束时间,以及字幕的文本内容,以\r\n相互隔开,最后以\r\n\r\n结束,这样的格式很容易通过正则表达式匹配来解析。
今天把客户端更新到了2.0.5.110,插队下载在这个版本得到了回归,而整合的迅雷云播则着实让我无力吐槽。
在Windows Phone 8上使用MediaElement的时候发现一个很奇怪的现象。按照MSDN的说法,MediaElement的Volume属性可以通过设置01之间的值来设置媒体音量(0为最小音量,1为最大音量),其默认值为0.5。然而在实际的使用中发现其默认值并不是如MSDN中所说的0.5而是1,且音量并不随着Volume从0到1均匀变化。在00.7之间声音很小几乎听不见,0.7之后开始有明显的声音,且在0.75~1.0这个区间内改变Volume的值音量随Volume的变化明显。
由此看来,音量(z)随Volume属性的值(y)的变化的函数z = g(y)的函数图像近似于指数函数图像沿y轴负方向移动一个单位(因为g(0) = 0)。对于用户来说通过滑动一个范围为0~1的音量条来调节音量,通常用户所期望的是音量(z)能随着音量条的值(x)以一次函数z=h(x)均匀变化,而非以指数函数变化。
由于要改变MediaElement的音量只能通过设置Volume属性来达到,因此需要找到一个合适的转换函数f(x) = y满足z = g(y) = g(f(x)) = h(x) = kx,(其中k为大于1的常数)。
Windows Phone 8是不支持播放FLV视频文件的。所以用C++写了个FLV视频分离器,目前仅支持AAC音频编码和H.264视频编码,支持拖动播放(仅当metadata中带有关键帧信息)。再由C#对C++进行封装,C#中封装的类继承自MediaStreamSource,最后经由MediaElement播放出来。
【2015/04/06更新】已将源码开放托管于:https://github.com/lxrite/DawnPlayer
附图一张: