??xml version="1.0" encoding="utf-8" standalone="yes"?>久久青青草原综合伊人,色综合合久久天天综合绕视看,久久久久人妻一区二区三区vr http://m.shnenglu.com/tx7do/category/18484.html严以律己,宽以待h. 三思而后?</br> GMail/GTalk: yanglinbo#google.com;</br> MSN/Email: tx7do#yahoo.com.cn;</br> QQ: 3 0 3 3 9 6 9 2 0 .zh-cnThu, 04 Sep 2014 02:43:54 GMTThu, 04 Sep 2014 02:43:54 GMT60H口大小控制MINMAXINFOhttp://m.shnenglu.com/tx7do/archive/2014/03/12/206136.html杨粼?/dc:creator>杨粼?/author>Tue, 11 Mar 2014 17:04:00 GMThttp://m.shnenglu.com/tx7do/archive/2014/03/12/206136.htmlhttp://m.shnenglu.com/tx7do/comments/206136.htmlhttp://m.shnenglu.com/tx7do/archive/2014/03/12/206136.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/206136.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/206136.html转蝲自:http://blog.csdn.net/sqcfj/article/details/7245568

Z控制H口的大,在窗口初始化Ӟ需要用到MINMAXINFOl构体?/p>

l构体:

typedef struct {
 POINT ptReserved;
 POINT ptMaxSize;
 POINT ptMaxPosition;
 POINT ptMinTrackSize;
 POINT ptMaxTrackSize;
}
 MINMAXINFO;


参数说明Q?br />
 ptMaxSizeQ?nbsp; 讄H口最大化时的宽度、高?br /> ptMaxPositionQ?nbsp;讄H口最大化时x坐标、y坐标
 ptMinTrackSizeQ?nbsp;讄H口最宽度、高?br /> ptMaxTrackSizeQ设|窗口最大宽度、高?br />

实例Q?br />1、在H口cLON_WM_GETMINMAXINFO消息Q?br />2、在该函C改MINMAXINFOl构体数据:

void CTestDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
 lpMMI
->ptMaxSize.x = 800;  // 讄H口最大化时的宽度
 lpMMI->ptMaxSize.y = 600;  // 讄H口最大化时的高度
 lpMMI->ptMaxPosition.x = 100// 讄H口最大化时x坐标
 lpMMI->ptMaxPosition.y = 100// 讄H口最大化时y坐标
 lpMMI->ptMinTrackSize.x = 400// 讄H口最宽?/span>
 lpMMI->ptMinTrackSize.y = 400// 讄H口最高?/span>
 lpMMI->ptMaxTrackSize.x = 600// 讄H口最大宽?/span>
 lpMMI->ptMaxTrackSize.y = 500// 讄H口最大高?/span>
 CDialog::OnGetMinMaxInfo(lpMMI);
}

 




]]>
对Windows下的File Mapping一个简单的装http://m.shnenglu.com/tx7do/archive/2014/02/25/205927.html杨粼?/dc:creator>杨粼?/author>Mon, 24 Feb 2014 16:29:00 GMThttp://m.shnenglu.com/tx7do/archive/2014/02/25/205927.htmlhttp://m.shnenglu.com/tx7do/comments/205927.htmlhttp://m.shnenglu.com/tx7do/archive/2014/02/25/205927.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/205927.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/205927.html#ifndef __SharedMemory_H__#define __SharedMemory_H__class SharedMemory{public:&nb...  阅读全文

]]>
waveInReset/waveOutReset死锁原因与解x?/title><link>http://m.shnenglu.com/tx7do/archive/2013/01/21/197429.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Sun, 20 Jan 2013 18:17:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2013/01/21/197429.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/197429.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2013/01/21/197429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/197429.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/197429.html</trackback:ping><description><![CDATA[<div><strong style="color: red">转蝲自:</strong><a style="color: red" ><strong>http://blog.csdn.net/soliddream66/article/details/5353960</strong></a><br /> <br /> <h2 style="text-align: left; padding-bottom: 0px; line-height: 26px; widows: 2; text-transform: none; font-variant: normal; font-style: normal; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">问题背景<br /> </h2> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">录音播音实际需?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1、随时终?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2、录韛_ƈ非文Ӟ而是形成rtp发?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3、播韛_ƈ非源于文Ӟ而是源于rtp</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">因此Waveform audio使用的buffer较小Q不断的装蝲/发?buffer,l止的时候Resetq且close.</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">大致如下调用的@?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">录音</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInUnprepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInPrepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInAddBuffer</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">播音</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutUnprepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutPrepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutWrite</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">循环周期40msQ我采用的是回调函数。问题是有时候调用waveInReset/waveOutReset会Ş成死锁,调用waveInReset/waveOutReset的线E与回调函数所在的U程死锁在一块了?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <h2 style="text-align: left; padding-bottom: 0px; line-height: 26px; widows: 2; text-transform: none; font-variant: normal; font-style: normal; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><a style="color: rgb(51,102,153)" name="t1"></a>原因分析</h2> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">q方面网上有文章提到Q就是调用waveInReset/waveOutReset的同时调用了录音/播音循环调用的某个函C形成死锁。我再稍作解释下Q我们知道buffer满了或是调用Reset都会触发消息Q回调函数方式的话就是MM_WOM_DONE/MM_WIM_DATAQ,׃调用waveInReset/waveOutReset所在的U程Q与回调函数所在的U程不是一个线E,因此很容易撞车,也就是说Q你调用reset的时候,另一个线E正好在处理MM_WOM_DONE/MM_WIM_DATAQ于是就q样死锁了?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <h2 style="text-align: left; padding-bottom: 0px; line-height: 26px; widows: 2; text-transform: none; font-variant: normal; font-style: normal; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><a style="color: rgb(51,102,153)" name="t2"></a>解决Ҏ</h2> <h3 style="text-align: left; padding-bottom: 0px; line-height: 26px; widows: 2; text-transform: none; font-variant: normal; font-style: normal; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><a style="color: rgb(51,102,153)" name="t3"></a>Ҏ一<br /> </h3> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">先加上标?假设标记bReset:bool)QobReset为true;</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">标记作用如下</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">if(!bReset)</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">{</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">录音</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInUnprepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInPrepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInAddBuffer</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">播音</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutUnprepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutPrepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutWrite</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">}</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">延时调用waveInReset/waveOutResetQg时时间长度以循环周期为妙Q我q个例子中也是采用40ms?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">当然也可以采用界保护?/p> <h3 style="text-align: left; padding-bottom: 0px; line-height: 26px; widows: 2; text-transform: none; font-variant: normal; font-style: normal; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><a style="color: rgb(51,102,153)" name="t4"></a><br /> </h3> <h3 style="text-align: left; padding-bottom: 0px; line-height: 26px; widows: 2; text-transform: none; font-variant: normal; font-style: normal; text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><a style="color: rgb(51,102,153)" name="t5"></a>Ҏ?/h3> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">换一个角度去考虑问题Q之所以死锁,是因Z个线E冲H了的缘故,所以可以徏立一个线E?/p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">录音</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInUnprepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInPrepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveInAddBuffer</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">播音</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutUnprepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutPrepareHeader</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">waveOutWrite</p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> </p> <p style="text-align: left; widows: 2; text-transform: none; text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">与waveInReset/waveOutReset都放到这个线E去处理Q自然不会发生死锁了?/p> </div><img src ="http://m.shnenglu.com/tx7do/aggbug/197429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2013-01-21 02:17 <a href="http://m.shnenglu.com/tx7do/archive/2013/01/21/197429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微Y代码{֐证书使用指南http://m.shnenglu.com/tx7do/archive/2012/12/06/196026.html杨粼?/dc:creator>杨粼?/author>Wed, 05 Dec 2012 16:04:00 GMThttp://m.shnenglu.com/tx7do/archive/2012/12/06/196026.htmlhttp://m.shnenglu.com/tx7do/comments/196026.htmlhttp://m.shnenglu.com/tx7do/archive/2012/12/06/196026.html#Feedback1http://m.shnenglu.com/tx7do/comments/commentRss/196026.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/196026.html转蝲自:http://www.willrey.com/support/signcode_guide_pfx.html

微Y的代码签名Y?SignCode.exe 的缺省的“典型”{֐cdQ就?#8220;从存储区选择”{֐证书Q同时由于微软的 Office 宏代码签名只支持同时包含了私钥和公钥?PFX 格式{֐证书Q也是直接“从存储区选择”{֐证书。在收到证书后请用户?Windows 的证书存储区导出备䆾{֐证书Q导出的证书格式?PFX 格式Q保好证书的密码?br />
下蝲Thawte代码{֐证书的中U根证书Q?br />https://search.thawte.com/support/ssl-digital-certificates/index?page=content&id=AR1382

下蝲VeriSign代码{֐证书的中U根证书Q?br />http://www.verisign.com/support/verisign-intermediate-ca/code-signing-intermediate/index.html


 使用微Y?span class="Apple-converted-space"> SignCode.exe 可以对微Y的代码进行签名,如果您没有此文gQ您可以点击 q里下蝲?Signcode.exe 可以使用 DOS 命o行方式实现签名,我们推荐用户使用数字{֐向导方式Q简单方ѝ请注意Q如果您开发的ActiveX为IE加蝲,请先数字{֐每个CAB文g中的.dll?ocx{文Ӟ再把q些文g打包?cab文g后再数字{֐.cab文gQ以保所有IE加蝲w被IE验证和信任,否则会显C?#8220;未验?#8221;而可能媄响正常运行?br />
具体{֐向导q程如下Q?/p>

    (1) q行 Signcode.exe Q要求您选择需要签名的文gQ支持:可执行文?(*.exe; *.dll; *.ocx) Q?Cabinet 打包文g (*.cab) 和目录文?(*.cat) Q如下图 1 所C?( 如: TestSign.cab) Q请注意Q如果签名的文g已经有数字签名,则会被新的签名覆?span class="Apple-converted-space"> signcode
(2) 点击“下一?#8221;后,如下?2 所C,会要求您选择“{֐cd”Q?直接点击“下一?#8221;卛_Q即选择~省?#8220;典型”{֐cdQ?span class="Apple-converted-space"> 
signcode
  (3) 如下?3 所C,点击“从存储区选择”Q则会显C您的电脑证书存储区的所有证书,包括存储在电脑和 USB Key 中的所有数字证书,选择您的{֐证书卛_Q?span class="Apple-converted-space"> 
verisign微Y代码{֐证书
(4) 如下?4 所C,要求填写该签名代码的功能描述Q推荐一定要认真填写Q因为此信息会在最l用户下载此代码时显C,有助于最l用户了解此代码的功能以定是否下蝲安装。第一?#8220;描述”是指此代码的功能文字描述Q第二行“ Web 位置”则让最l用LL字描q来详细了解此代码的功能和用方法等?/p>


(5) 点击“下一?#8221;后,如下?9 所C,选中“时间戳d到数据中”Q请使用:

VeriSign 免费提供的时间戳URLQ?strong style="color: rgb(86,87,89); font-size: 12px">http://timestamp.verisign.com/scripts/timestamp.dll

    旉x务非帔R要,d旉戛_Q即使您的代码签名证书已l过期,但由于您的代码是在证书有效期内签名的Q则旉x务保证了此代码仍然可信,最l用户仍然可以放心下载,使得即代码{֐证书已经q期Q您也无需重签已经{֐的代码?/p>


 (6) 点击“下一?#8221;后,如下?6 所C,会提C已l完成数字签名向|点击“完成”完成了中文版代码签名证书的代码{֐?br /> 



]]>
Speex manul中文?/title><link>http://m.shnenglu.com/tx7do/archive/2012/11/21/195510.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Wed, 21 Nov 2012 15:56:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/11/21/195510.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/195510.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/11/21/195510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/195510.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/195510.html</trackback:ping><description><![CDATA[<strong style="color: red">转蝲?</strong><a style="color: red" ><strong>http://www.cnblogs.com/rosesmall/archive/2012/04/18/2455395.html</strong></a><br /><br /> <div style="widows: 2; text-transform: none; text-indent: 0px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-break: normal !important; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" id="cnblogs_post_body"> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span><strong>在VOIP的音频算法中Q回韛_理已l成Z个关p通话质量的主要问题?/strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span><strong>回声的生在IP|络主要有两U:<br />1.声学回声<br />2.电\回声</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span><strong>声学回声主要又分成以下几U?<br />a ) 直接回声:由扬声器产生的声xlQ何反直接进入麦克风<br />b ) 间接回声: 由扬声器发出的声音经q多ơ反后,再进入Mic<br />对于W二U回?拥有多\?时变性的特点.是比较难处理?</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span><strong>׃IP|络下的传输的gq较?而一般情况下,对于?如果声音延迟辑ֈ?0ms以上的话,那么回声׃来明?<br />一般来?VOIP中的声音延迟主要来自于几个方?<br />1. ~码延迟: 一般情况下~码法在声韛_~时都会产生延迟,我们采用的Speex来讲,延迟大概?0ms左右<br />2. 处理延迟, 装时g, ~冲时g{?br />3. 在IP|络中数据的传输q程也会照成延时.q由当前的网l状况决?</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span><strong>回声消除的模?<br />a) 建立q端声音模型,q行回声估计, 从采集的g减去估计?br />b) 声学模型</strong></span></span></p> <h4 id="subjcns!31B2F8637FF39314!234" class="TextColor1"><span>Speex manul(手册)中文?/span></h4> <div class="amkciey" id="msgcns!31B2F8637FF39314!234"> <div> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>Speex</span></span><span>是一套专门用于压~声音的?/span><span lang="EN-US"><span>,</span></span><span>׃其专门针对声?/span><span lang="EN-US"><span>,</span></span><span>所以压~声音的性能非常?/span><span lang="EN-US"><span>.Speex</span></span><span>׃其压~性能</span><span lang="EN-US"><span>,</span></span><span>?/span><span lang="EN-US"><span>0.80</span></span><span>版后的跨q_的性能</span><span lang="EN-US"><span>,</span></span><span>所以在|络声音的传输中有很大的价?/span><span lang="EN-US"><span>.</span></span><span>但是需要注意的?/span><span lang="EN-US"><span>speex</span></span><span>只能对声韌行压~?/span><span lang="EN-US"><span>,</span></span><span>不支持音乐的压羃</span><span lang="EN-US"><span>,</span></span><span>如果你需要音乐的压羃你或讔R要用</span><span lang="EN-US"><span>vorbis</span></span><span>?/span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>       </span></span><span>但是?/span><span lang="EN-US"><span>speex</span></span><span>资料像其它大都数专用库一?/span><span lang="EN-US"><span>,</span></span><span>q没有大多的中文资料</span><span lang="EN-US"><span>.</span></span><span>所以在q里我决定将里面最核心的编E技术翻译出?/span><span lang="EN-US"><span>.</span></span><span>一来是l习l习自己译资料的能?/span><span lang="EN-US"><span>,</span></span><span>二来是方便一些英语水q差的朋友</span><span lang="EN-US"><span>.</span></span><span>׃本h能力有限</span><span lang="EN-US"><span>,</span></span><span>有些感觉有出入或隄解的地方可以?/span><span lang="EN-US"><span>speex</span></span><span>的官方网?/span><span lang="EN-US"><a style="background-color: transparent; color: rgb(51,102,153); text-decoration: none; background-origin: initial; background-clip: initial" ><span>www.speex.org</span></a></span><span>扑ֈ英文原版的说?/span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span>译的一些说?/span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>1,</span></span><span>对于一些专有名词如</span><span lang="EN-US"><span>speex,api</span></span><span>不过行翻?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>2,</span></span><span>对于一些新概念译</span><span lang="EN-US"><span>,</span></span><span>以及其它的翻译过来也怼产生歧义的文?/span><span lang="EN-US"><span>,</span></span><span>用中</span><span lang="EN-US"><span>/</span></span><span>׃U方式标?/span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>       </span></span><span>?/span><span lang="EN-US"><span>:</span></span><span>对话</span><span lang="EN-US"><span>(speech),</span></span><span>位采?/span><span lang="EN-US"><span>(bit_packing)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>3,</span></span><span>基本做到和英文原行对?/span><span lang="EN-US"><span>.</span></span><span>及英文原文一?/span><span lang="EN-US"><span>,</span></span><span>中文译q来也是一?/span><span lang="EN-US"><span>,</span></span><span>使翻译后的文章和原文基本行行对照</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>4,</span></span><span>源代码不译</span><span lang="EN-US"><span>,</span></span><span>?/span><span lang="EN-US"><span>SpeexBits bits;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>5,</span></span><span>语言中的兛_字不?/span><span lang="EN-US"><span>,</span></span><span>?/span><span lang="EN-US"><span>float</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>6,</span></span><span>一此不是关健字但英文通常出现的词W一ơ以?/span><span lang="EN-US"><span>/</span></span><span>英文格式l出</span><span lang="EN-US"><span>,</span></span><span>之后按具体情늻文或中文</span><span lang="EN-US"><span>,</span></span><span>?/span><span lang="EN-US"><span>:frame(</span></span><span>?/span><span lang="EN-US"><span>),</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span lang="EN-US"><span>7,</span></span><span>对一些有自己译h感觉有歧义的地方</span><span lang="EN-US"><span>,</span></span><span>加斜U作标记</span> </p></div></div> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span><strong>1,speex的介l??</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong><span>2</span>特征描述</strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>q个章节展示?/span><span lang="EN-US"><span>speex</span></span><span>的主要特?/span><span lang="EN-US"><span>,</span></span><span>以衣一些关于对?/span><span lang="EN-US"><span>(speech)</span></span><span>~码的一个概?/span><span lang="EN-US"><span>,</span></span><span>以便</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>帮助我们更好的了解下一章节</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>取样?span>(Sampling rate)</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>Speex</span></span><span>主要是设计了三种不同的取L</span><span lang="EN-US"><span>:8kHz,16kHz,32kHz.</span></span><span>q些分别代表了窄?/span><span lang="EN-US"><span>(narrowband),</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>多频?/span><span lang="EN-US"><span>,</span></span><span>声</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>质量</strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>Speex</span></span><span>~码大都数时间是被一个范围ؓ</span><span lang="EN-US"><span>0</span></span><span>?/span><span lang="EN-US"><span>10</span></span><span>的质量参数来控制</span><span lang="EN-US"><span>  </span></span><span>?/span><span lang="EN-US"><span>.</span></span><span>在一个比特率为常?/span><span lang="EN-US"><span>(CBR)</span></span><span>的操作中</span><span lang="EN-US"><span>,</span></span><span>质量参数是一个整?/span><span lang="EN-US"><span>,</span></span><span>而对于变动的比特?/span><span lang="EN-US"><span>(VBR)</span></span><span>参数是一?/span><span lang="EN-US"><span>float;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong><span>复杂?/span><span lang="EN-US"><span>(</span></span><span>变量</span><span lang="EN-US"><span>)</span></span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>?/span><span lang="EN-US"><span>speex,</span></span><span>你可以将~码讄成允许的复杂?/span><span lang="EN-US"><span>.</span></span><span>q由一个范围ؓ</span><span lang="EN-US"><span>1</span></span><span>?/span><span lang="EN-US"><span>10</span></span><span>的整数来控制完成</span><span lang="EN-US"><span>,</span></span><span>像你用选项</span><span lang="EN-US"><span>-1</span></span><span>?/span><span lang="EN-US"><span>-9</span></span><span>来控?/span><span lang="EN-US"><span>gzip</span></span><span>?/span><span lang="EN-US"><span>bzip2</span></span><span>的压~质?/span><span lang="EN-US"><span>.</span></span><span>在通常的运用中</span><span lang="EN-US"><span>,</span></span><span>噪声U别的复杂度</span><span lang="EN-US"><span>1</span></span><span>是在</span><span lang="EN-US"><span>1</span></span><span>?/span><span lang="EN-US"><span>2dB</span></span><span>之间</span><span lang="EN-US"><span>,</span></span><span>比复杂度</span><span lang="EN-US"><span>10</span></span><span>要高</span><span lang="EN-US"><span>,</span></span><span>但是</span><span lang="EN-US"><span>CPU</span></span><span>需要复杂度</span><span lang="EN-US"><span>10</span></span><span>大概</span><span lang="EN-US"><span>5</span></span><span>倍高行复杂度</span><span lang="EN-US"><span>1.</span></span><span>在实践中</span><span lang="EN-US"><span>,</span></span><span>最好的是设|在</span><span lang="EN-US"><span>2</span></span><span>?/span><span lang="EN-US"><span>4</span></span><span>之间</span><span lang="EN-US"><span>,</span></span><span>管更高的设定通常有用</span><span lang="EN-US"><span>,</span></span><span>当编码一个非对话声音</span><span lang="EN-US"><span>(non-speech sounds)</span></span><span>?/span><span lang="EN-US"><span>DTMF</span></span><span>语调</span><span lang="EN-US"><span>(tones).</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>变L特率<span>(VBR</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>Variable bit-rate (VBR) allows a codec to change its bit-rate dynamically to adapt to</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>变L特率</span><span lang="EN-US"><span>(VBR)</span></span><span>允许~码动态地改变它的波特率以适应声音~码?/span><span lang="EN-US"><span>”</span></span><span>隑ֺ</span><span lang="EN-US"><span>”.</span></span><span>?/span><span lang="EN-US"><span>speex</span></span><span>举例来说</span><span lang="EN-US"><span>,</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>像元?/span><span lang="EN-US"><span>(vowel)</span></span><span>和瞬间高?/span><span lang="EN-US"><span>(high-enenrg transients)</span></span><span>需要个高的比特率来</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>取得一个不错的质量</span><span lang="EN-US"><span>,</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>而摩擦音</span><span lang="EN-US"><span>(fricative)</span></span><span>可以被充分地用相对较的字节来进行编?/span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>׃上面q个原因</span><span lang="EN-US"><span>,VBR</span></span><span>可以调节C个低的比特率却达C个同L质量</span><span lang="EN-US"><span>,</span></span><span>或者用</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>某个比特率达到更好的质量</span><span lang="EN-US"><span>.</span></span><span>管有上面这些优?/span><span lang="EN-US"><span>,</span></span><span>但是</span><span lang="EN-US"><span>VBR</span></span><span>也有两个主要的缺?/span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>首先</span><span lang="EN-US"><span>,</span></span><span>仅仅靠指定质量?/span><span lang="EN-US"><span>,</span></span><span>q里没有一个关于最后^均比特率的保?/span><span lang="EN-US"><span>.(</span></span><span>译者注</span><span lang="EN-US"><span>:</span></span><span>作者大概是惌没有什么明的Ҏ知道质量?/span><span lang="EN-US"><span>)</span></span><span>此外</span><span lang="EN-US"><span>,</span></span><span>对一些即?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>通信</span><span lang="EN-US"><span>,</span></span><span>?/span><span lang="EN-US"><span>IP</span></span><span>电话</span><span lang="EN-US"><span>(VoIP)</span></span><span>q种包含着最大的比特率的</span><span lang="EN-US"><span>,</span></span><span>必须把比特率设ؓ_低以适应</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>传输通道</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>r</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>q_比特?span>(ABR)</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>q_比特率通过动态地调节</span><span lang="EN-US"><span>VBR</span></span><span>质量dC个确定的目标的比特率</span><span lang="EN-US"><span>,</span></span><span>从而解决了</span><span lang="EN-US"><span>VBR</span></span><span>中的一个问?/span><span lang="EN-US"><span>..</span></span><span>因ؓ质量</span><span lang="EN-US"><span>/</span></span><span>比特率被x的调整了</span><span lang="EN-US"><span>,</span></span><span>整体质量会E稍低于?/span><span lang="EN-US"><span>VBR</span></span><span>对一?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>讄得和目标q_比特率非常接q的质量数编码得到的l果</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span> </span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>声音生动性检?span>(VAD)</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>声音生动性检将会发觉音频正在被~码成对?/span><span lang="EN-US"><span>,</span></span><span>静音</span><span lang="EN-US"><span>,</span></span><span>或背景噪?/span><span lang="EN-US"><span>.VAD</span></span><span>d?/span><span lang="EN-US"><span>VBR</span></span><span>q行~码时暗中v作用</span><span lang="EN-US"><span>,</span></span><span>因此选项仅仅对一个不?/span><span lang="EN-US"><span>VBR</span></span><span>的操作v作用</span><span lang="EN-US"><span>.</span></span><span>对于不是</span><span lang="EN-US"><span>VBR</span></span><span>的操作来?/span><span lang="EN-US"><span>,speex</span></span><span>察觉Z个不属于对话的周?/span><span lang="EN-US"><span>,</span></span><span>然后对它用够的字节重新生成景噪?/span><span lang="EN-US"><span>.</span></span><span>不这叫做<span>舒适的噪音生成</span></span><span lang="EN-US"><span>(</span></span><span lang="EN-US"><span>CNG).</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>不连l传?span>(DTX)</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>不连l传输是</span><span lang="EN-US"><span>VAD/VBR</span></span><span>操作的一个额外选项</span><span lang="EN-US"><span>,</span></span><span>当背景噪音一定时</span><span lang="EN-US"><span>,</span></span><span>它可以完整地传输</span><span lang="EN-US"><span>.</span></span><span>因ؓ在基于文件的操作?/span><span lang="EN-US"><span>,</span></span><span>我们不能停止Ҏ件进行写?/span><span lang="EN-US"><span>,</span></span><span>所以只?/span><span lang="EN-US"><span>5</span></span><span>字节被这U所q用</span><span lang="EN-US"><span>.(</span></span><span>l?/span><span lang="EN-US"><span>250bps</span></span><span>通信</span><span lang="EN-US"><span>)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span><strong>Perceptual enhancement</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong><span>知觉增强</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>知觉增加是解码的一部分</span><span lang="EN-US"><span>,</span></span><span>它在打开的时候用来减由~码解码所产生的噪?/span><span lang="EN-US"><span>.</span></span><span>在大都数</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>情况?/span><span lang="EN-US"><span>,</span></span><span>知觉增强在客观上使声音离原始值更q?/span><span lang="EN-US"><span>(</span></span><span>如果?/span><span lang="EN-US"><span>SNR),</span></span><span>但是在最后它仍然听v来更?/span><span lang="EN-US"><span>(</span></span><span>主观上的改进</span><span lang="EN-US"><span>)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span><strong>Algorithmic delay</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong>q时法</strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>每一个声音编码导致了在传输上的g?/span><span lang="EN-US"><span>.</span></span><span>对于</span><span lang="EN-US"><span>speex,</span></span><span>q种延时{于</span><span lang="EN-US"><span>frame</span></span><span>的大加上一?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>数量的需要对每一帧进行的前瞻</span><span lang="EN-US"><span>(”look-adhead”).</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>在窄宽操作中</span><span lang="EN-US"><span>(8kHz),</span></span><span>q时?/span><span lang="EN-US"><span>30ms,</span></span><span>而对于多频率</span><span lang="EN-US"><span>(2-44Hz),</span></span><span>q时?/span><span lang="EN-US"><span>34ms.</span></span><span>q些?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>不包?/span><span lang="EN-US"><span>CPU</span></span><span>~码</span><span lang="EN-US"><span>,</span></span><span>解码帧的旉</span><span lang="EN-US"><span>.</span></span> </p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span><strong>?span>speex</span>~程<span>(the libspeex api)</span></strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>q个章节讲述了如何用</span><span lang="EN-US"><span>speex api</span></span><span>q行~程</span><span lang="EN-US"><span>.</span></span><span>例子的源代友你也可以在附?/span><span lang="EN-US"><span>B</span></span><span>中找?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span><strong>4.1 Encoding</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong><span>4.1</span>压羃</strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>Z?/span><span lang="EN-US"><span>Speex</span></span><span>压羃对话</span><span lang="EN-US"><span>,</span></span><span>你首先需要引用头文g</span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>#include <speex.h></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>然后你需要定义一?/span><span lang="EN-US"><span>Speex</span></span><span>的位采集</span><span lang="EN-US"><span>(bit-packing)</span></span><span>l构</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>SpeexBits bits;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>and a Speex encoder state</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>以及定义一?/span><span lang="EN-US"><span>speex</span></span><span>~码器状态量</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>void *enc_state;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>上面定义的这栯初始?/span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>The two are initialized by:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_bits_init(&bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>enc_state = speex_encoder_init(&speex_nb_mode);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>Z支持多频率的压羃</span><span lang="EN-US"><span>,speex_nb_mode</span></span><span>被</span><span lang="EN-US"><span>sppex_wb_mode</span></span><span>取代</span><span lang="EN-US"><span>.</span></span><span>在大都数</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>情况?/span><span lang="EN-US"><span>,</span></span><span>你需要知道你用的模式</span><span lang="EN-US"><span>(mode)</span></span><span>的</span><span lang="EN-US"><span>(frame)</span></span><span>的大?/span><span lang="EN-US"><span>,</span></span><span>你可以得到在</span><span lang="EN-US"><span>frame_size</span></span><span>变量里得到这?/span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>一但初始化完毕</span><span lang="EN-US"><span>,</span></span><span>对于每一个输入</span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_bits_reset(&bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_encode(enc_state, input_frame, &bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>上面</span><span lang="EN-US"><span>input_frame</span></span><span>是一个指向对?/span><span lang="EN-US"><span>(speech)</span></span><span>?/span><span lang="EN-US"><span>(frame)</span></span><span>?/span><span lang="EN-US"><span>float</span></span><span>指针</span><span lang="EN-US"><span>(pointing);byte_ptr</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>是指向编码开始写的地方的</span><span lang="EN-US"><span>char</span></span><span>指针</span><span lang="EN-US"><span>,MAX_NB_BYTES</span></span><span>是能</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>写进</span><span lang="EN-US"><span>byte_ptr</span></span><span>而不会造成溢出的最大数</span><span lang="EN-US"><span>.nbBytes</span></span><span>是一个实际写?/span><span lang="EN-US"><span>btye_ptr</span></span><span>的数</span><span lang="EN-US"><span>,</span></span><span>即编码的实际大小</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>在调?/span><span lang="EN-US"><span>speex_bits_write</span></span><span>?/span><span lang="EN-US"><span>,</span></span><span>可能你需要调?/span><span lang="EN-US"><span>speex_bits_nbytes(&bits)</span></span><span>得到需要写?/span><span lang="EN-US"><span>(write)</span></span><span>的字节大?/span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>在你已经~码?/span><span lang="EN-US"><span>,</span></span><span>释放所有的资源</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_bits_destroy(&bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_encoder_destroy(enc_state);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>That’s about it for the encoder.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span> </span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>q就是关于编码的斚w</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span> </span></p> <h4 id="subjcns!31B2F8637FF39314!276" class="TextColor1"><span>Speex manul中文版三</span></h4> <div class="wmmk2ke" id="msgcns!31B2F8637FF39314!276"> <div> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>附源代码的翻?/span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span><strong>B Sample code</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span><strong><span>B </span>例程源代?/strong></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>q个章节演示了一D는</span><span lang="EN-US"><span>speex</span></span><span>~码</span><span lang="EN-US"><span>,</span></span><span>解码对话</span><span lang="EN-US"><span>(speech)</span></span><span>的源代码</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>可以如下?/span><span lang="EN-US"><span>api</span></span><span>命o来编码ƈ解码一个文?/span><span lang="EN-US"><span>:</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>译者注</span><span lang="EN-US"><span>:</span></span><span>q里说的</span><span lang="EN-US"><span>api</span></span><span>命o是指</span><span lang="EN-US"><span>unix</span></span><span>的用</span><span lang="EN-US"><span>”|”</span></span><span>q行道写入d</span><span lang="EN-US"><span>.</span></span><span>?/span><span lang="EN-US"><span>windows</span></span><span>下这样ƈ不能实现</span><span lang="EN-US"><span>.</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>% sampleenc in_file.sw | sampledec out_file.sw</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span>q里q两D代码都没有引用其它的头文g</span><span lang="EN-US"><span>,</span></span><span>q以</span><span lang="EN-US"><span>16 </span></span><span>比特?/span><span lang="EN-US"><span>(bits)</span></span><span>q行~码</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>natural endianness).</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span><strong>B.1 sampleenc.c</strong></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>Sameleenc </span></span><span>用一个未加工?/span><span lang="EN-US"><span>16</span></span><span>比特?/span><span lang="EN-US"><span>(bits)</span></span><span>文章</span><span lang="EN-US"><span>,</span></span><span>l它~码q生一?/span><span lang="EN-US"><span>speex </span></span><span>?/span><span lang="EN-US"><span>(steam)</span></span><span>l标准输?/span><span lang="EN-US"><span>.</span></span><span>注意已压~的?/span><span lang="EN-US"><span>speexenc/speexdec</span></span><span>不和?/span><span lang="EN-US"><span>!</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>#include <speex.h></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>#include <stdio.h></span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>/*</span></span><span>帧的大小在这个例E中是一个固定的?/span><span lang="EN-US"><span>,</span></span><span>但它q不是必这?/span><span lang="EN-US"><span>*/</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span> </span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>#define FRAME_SIZE 160</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>int main(int argc, char **argv)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>{</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>char *inFile;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>FILE *fin;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>short in[FRAME_SIZE];</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>float input[FRAME_SIZE];</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>char cbits[200];</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>int nbBytes;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>/*</span></span><span>保存~码的状?/span><span lang="EN-US"><span>*/</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>void *state;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>/*</span></span><span>保存字节因此他们可以?/span><span lang="EN-US"><span>speex</span></span><span>常规</span><span>d</span><span lang="EN-US"><span>*/</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span> </span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>SpeexBits bits;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>int i, tmp;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>新徏一个新的编码状态在H宽</span><span lang="EN-US"><span>(narrowband)</span></span><span>模式?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>state = speex_encoder_init(&speex_nb_mode);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>讄质量?/span><span lang="EN-US"><span>8(15kbps)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>tmp=8;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>inFile = argv[1];</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>fin = fopen(inFile, "r");</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>初始化结构他们保存数据</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_bits_init(&bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>while (1)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>{</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>d一?/span><span lang="EN-US"><span>16bits</span></span><span>的声?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>fread(in, sizeof(short), FRAME_SIZE, fin);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>if (feof(fin))</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>break;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>?/span><span lang="EN-US"><span>16bits</span></span><span>的D{化ؓ</span><span lang="EN-US"><span>float,</span></span><span>以便</span><span lang="EN-US"><span>speex</span></span><span>库可以在上面工作</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>for (i=0;i<FRAME_SIZE;i++)</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>input[i]=in[i];</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>清空q个l构体里所有的字节</span><span lang="EN-US"><span>,</span></span><span>以便我们可以~码一个新的</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_bits_reset(&bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>对q行~码</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_encode(state, input, &bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>?/span><span lang="EN-US"><span>bits</span></span><span>拯C个利用写出的</span><span lang="EN-US"><span>char</span></span><span>型数l?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>nbBytes = speex_bits_write(&bits, cbits, 200);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>首先写出帧的大小</span><span lang="EN-US"><span>,</span></span><span>q是</span><span lang="EN-US"><span>sampledec</span></span><span>文g需要的一个?/span><span lang="EN-US"><span>,</span></span><span>但是你的应用E序中可能不一?/span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>fwrite(&nbBytes, sizeof(int), 1, stdout);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>写出压羃后的数组</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>fwrite(cbits, 1, nbBytes, stdout);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>}</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>释放</span><span>~码器状态量</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_encoder_destroy(state);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>//</span></span><span>释放</span><span lang="EN-US"><span>bit_packing</span></span><span>l构</span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>speex_bits_destroy(&bits);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>fclose(fin);</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>return 0;</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span lang="EN-US"><span>}</span></span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px" align="left"><span> </span></p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px"><span> </span></p></div></div> <div id="ioowyiy" class="postTitle"><a style="background-color: transparent; color: rgb(51,102,153); text-decoration: none; background-origin: initial; background-clip: initial" ><span>如何使用Speex中的AEC模块Q提高声韌量?</span></a></div> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">在SpeexQ?a style="background-color: transparent; color: rgb(51,102,153); text-decoration: none; background-origin: initial; background-clip: initial" ><span>www.speex.org</span></a>Q的最新版本中Q开始集成了回音消除的模块,而回x除一直是Voip之中亟待解决的主要问题?br />很多朋友和我说speex的aec模块的效能ƈ不好Q我们先来看一下speex的aec的api调用方式?/p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">/*<br />*创徏AEC对象<br />*/<br />SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">frame_size 的取值最好是一个编码的frame大小Q?在低带宽条g下,一般gq?0msQ而大ؓ160<br />filter_length,最好是戉K内反时间的1/3<br />? 一个房间的反射时g?00ms<br />    那么q个filter_length最好是100ms(q个长度又被UCؓtail length).</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">而其中filter_length的设定是一个关键?/p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">/*<br />*执行AEC<br />*/<br />speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">其中:<br />input_frame: 是被声卡捕捉到的声?br />echo_frame: 是由扬声器播攑և的声?q个声音是需要从 input_frame中抵消的声音.</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">output_frame 是处理完以后输出的声?/p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">residue是一个可选参?如果不用可以将之设|ؓNULL, 也可以通过preprocessor 来控?/p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">问题的关键是 处理input和echo 之间的关p?<br />也就是说在捕捉到的信号和播放的信号之间的延迟必须_的小,才可以提高效?</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">writetosndcard(echo_frame, frame_size)<br />readfromsndcard(input_frame, frame_size)<br />speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue)<br />如果你想要尽可能的减信号中的回?那么可以residueq个参数讄为噪韛_?</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">我相信在大多数情况下Q都是因为声x捉和声音播放之间的同步问题没有处理好Q导致的音频质量下降?/p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">/*<br />*销毁和复位<br />*/<br />speex_echo_state_destroy(echo_state);</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">speex_echo_state_reset(echo_state);<br />不再复述了!</p> <p style="line-height: 1.5; text-indent: 0px; margin: 10px auto; font-size: 13px">说明Q?br />据说在Speex的最新的1.2beta版本上,Speex提供了可选择的,化的APIQ来提高echo执行q程中的同步问题?/p></div><img src ="http://m.shnenglu.com/tx7do/aggbug/195510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-11-21 23:56 <a href="http://m.shnenglu.com/tx7do/archive/2012/11/21/195510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Speex 回声消除http://m.shnenglu.com/tx7do/archive/2012/11/21/195507.html杨粼?/dc:creator>杨粼?/author>Wed, 21 Nov 2012 15:44:00 GMThttp://m.shnenglu.com/tx7do/archive/2012/11/21/195507.htmlhttp://m.shnenglu.com/tx7do/comments/195507.htmlhttp://m.shnenglu.com/tx7do/archive/2012/11/21/195507.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/195507.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/195507.html阅读全文

]]>
AEC (Acoustic Echo Canceller) 回音消除初探http://m.shnenglu.com/tx7do/archive/2012/11/21/195505.html杨粼?/dc:creator>杨粼?/author>Wed, 21 Nov 2012 15:23:00 GMThttp://m.shnenglu.com/tx7do/archive/2012/11/21/195505.htmlhttp://m.shnenglu.com/tx7do/comments/195505.htmlhttp://m.shnenglu.com/tx7do/archive/2012/11/21/195505.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/195505.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/195505.html转蝲?http://www.cnblogs.com/rainbowzc/archive/2006/08/07/2422323.html

AEC回声抑制法Q这个比较难Q目前可以用directsoundq行处理Q不q只能在xp下用,别的pȝ不支持!
目前gipsҎ法有出色的实现Qskype是使用的该引擎Q?br />要想自己实现Q恐怕很困难Q?br /> 

AEC 模块?Microsoft DirectSound 底层l构的一部分。该lg包括下列Ҏ和限制Q?/p>

AEC只在不超q?25×15×9 英尺的小戉K才会有效Q?span class="Apple-converted-space"> 
AEC只对单声道有效,当输出是多个通道的立体声的时候,只有一个通道能够h回L抉|的效果; 
AEC不能抉|来自其它声音源的声音Q比如背景中攉机放出来的歌Ԍ
IDirectSoundFullDuplex8*      DirectSoundFD;//
IDirectSoundCaptureBuffer8*  DirectSoundCaptureBuf8;//捕捉~冲区接口指?br />IDirectSoundBuffer8*         DirectSoundBuf8;//回放~冲区接口指?br />IDirectSoundBuffer8*         pIUnkown;//回放~冲区接口指?/p>

extern "C" const GUID IID_IDirectSoundBuffer8 = {0x6825a449, 0x7524, 0x4d82,{ 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e}};
extern "C" const GUID GUID_DSCFX_MS_NS        = {0x11c5c73b, 0x66e9, 0x4ba1, {0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d}};
extern "C" const GUID GUID_DSCFX_CLASS_NS = {0xe07f903f, 0x62fd, 0x4e60, {0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5}};
extern "C" const GUID GUID_DSCFX_MS_AEC = {0xcdebb919, 0x379a, 0x488a, {0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40}};
extern "C" const GUID GUID_DSCFX_CLASS_AEC = {0xBF963D80L, 0xC559, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}};
extern "C" const GUID DAlgorithm ={0x00000000,  0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};


//1.创徏及初始化DirectSound
WAVEFORMATEX WaveDataFormat={WAVE_FORMAT_PCM, 1,8000,16000,2,16, 0};             
//回放~冲区。render buffer
DSBUFFERDESC desc;
memset(&desc, 0, sizeof(desc)); 
desc.dwSize = sizeof(desc);
desc.dwFlags = DSBCAPS_CTRLFX | DSBCAPS_GLOBALFOCUS;
desc.dwBufferBytes = 2000 * NUM_REC_NOTIFICATIONS;//待定
desc.dwReserved = 0;
desc.lpwfxFormat = &WaveDataFormat;
   

//捕捉~冲区AEC和NS效果?br />DSCEFFECTDESC efft[2];
memset(efft, 0, sizeof(efft));
//AEC效果
efft[0].dwSize = sizeof(efft[0]);
efft[0].dwFlags = DSCFX_LOCSOFTWARE;
efft[0].guidDSCFXClass = GUID_DSCFX_CLASS_AEC;
efft[0].guidDSCFXInstance = GUID_DSCFX_MS_AEC;
//NS效果
efft[1].dwSize = sizeof(efft[1]);
efft[1].dwFlags = DSCFX_LOCSOFTWARE;
efft[1].guidDSCFXClass = GUID_DSCFX_CLASS_NS;
efft[1].guidDSCFXInstance = GUID_DSCFX_MS_NS;
    
//捕捉~冲区。capture buffer
DSCBUFFERDESC cdesc;
memset(&cdesc, 0, sizeof(cdesc));
cdesc.dwSize = sizeof(cdesc);
cdesc.dwFlags = DSCBCAPS_CTRLFX; 
cdesc.dwBufferBytes =  2000 * NUM_REC_NOTIFICATIONS;//待定
cdesc.lpwfxFormat = &WaveDataFormat;
cdesc.dwFXCount = 2;
cdesc.lpDSCFXDesc = efft;

HWND win = AfxGetApp()->m_pMainWnd->m_hWnd;
hr = DirectSoundFullDuplexCreate8(0, 0,&cdesc, &desc,win, 
DSSCL_PRIORITY,&DirectSoundFD, &DirectSoundCaptureBuf8,&DirectSoundBuf8, 0); 
DXTRACE_ERR( TEXT("DirectSoundFullDuplexCreate8"), hr );
//成功创徏DirectSoundFDQDirectSoundCaptureBuf8QDirectSoundBuf8Q均不ؓ零?/p>

if(!FAILED(hr))
    DirectSoundFD->QueryInterface(IID_IDirectSoundBuffer8, (void**)pIUnkown);
//发现上面的pIUnkown=0Q查询失败,Z么?
    AfxMessageBox("p|");



]]>
混音器编E接口讨?/title><link>http://m.shnenglu.com/tx7do/archive/2012/11/05/194617.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Mon, 05 Nov 2012 10:23:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/11/05/194617.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/194617.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/11/05/194617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/194617.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/194617.html</trackback:ping><description><![CDATA[     摘要: 转蝲?http://www.cnblogs.com/windviki/archive/2011/08/31/2160683.html 混音器编E接口讨?译Qwindviki@gmail.com 转蝲h? 译自QMIXER API ARGUMENTATION Z理解混音器API是如何工作的Q必d了解典型的声卡的g布局?我们有必要想象一下,声卡上有各种?..  <a href='http://m.shnenglu.com/tx7do/archive/2012/11/05/194617.html'>阅读全文</a><img src ="http://m.shnenglu.com/tx7do/aggbug/194617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-11-05 18:23 <a href="http://m.shnenglu.com/tx7do/archive/2012/11/05/194617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CxImage使用掩码色设|透明色的?/title><link>http://m.shnenglu.com/tx7do/archive/2012/11/01/194161.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Thu, 01 Nov 2012 07:05:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/11/01/194161.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/194161.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/11/01/194161.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/194161.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/194161.html</trackback:ping><description><![CDATA[CxImage讄透明色的Ҏ:<br /> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #0000ff">void</span><span style="color: #000000"> SetImageTransColor( CxImage</span><span style="color: #000000">*</span><span style="color: #000000"> pImg, BYTE R, BYTE G, BYTE B )<br /><img id="Codehighlighter1_65_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_250_Open_Text.style.display='none'; Codehighlighter1_65_250_Closed_Image.style.display='inline'; Codehighlighter1_65_250_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_65_250_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_65_250_Closed_Text.style.display='none'; Codehighlighter1_65_250_Open_Image.style.display='inline'; Codehighlighter1_65_250_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_65_250_Closed_Text"><img src="http://m.shnenglu.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_65_250_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pImg </span><span style="color: #000000">==</span><span style="color: #000000"> NULL) </span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pImg</span><span style="color: #000000">-></span><span style="color: #000000">GetTransIndex() </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #000000">24</span><span style="color: #000000">)<br /><img id="Codehighlighter1_129_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_129_157_Open_Text.style.display='none'; Codehighlighter1_129_157_Closed_Image.style.display='inline'; Codehighlighter1_129_157_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_129_157_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_129_157_Closed_Text.style.display='none'; Codehighlighter1_129_157_Open_Image.style.display='inline'; Codehighlighter1_129_157_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_129_157_Closed_Text"><img src="http://m.shnenglu.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_129_157_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />        pImg</span><span style="color: #000000">-></span><span style="color: #000000">IncreaseBpp(</span><span style="color: #000000">24</span><span style="color: #000000">);<br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" />    }</span></span><span style="color: #000000"><br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />    pImg</span><span style="color: #000000">-></span><span style="color: #000000">SetTransIndex(</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img id="Codehighlighter1_204_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_204_215_Open_Text.style.display='none'; Codehighlighter1_204_215_Closed_Image.style.display='inline'; Codehighlighter1_204_215_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_204_215_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_204_215_Closed_Text.style.display='none'; Codehighlighter1_204_215_Open_Image.style.display='inline'; Codehighlighter1_204_215_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif">    RGBQUAD rgbTrans </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_204_215_Closed_Text"><img src="http://m.shnenglu.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_204_215_Open_Text"><span style="color: #000000">{B, G, R, </span><span style="color: #000000">0</span><span style="color: #000000">}</span></span><span style="color: #000000">;<br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />    pImg</span><span style="color: #000000">-></span><span style="color: #000000">SetTransColor(rgbTrans);<br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />}</span></span></div>l过q样讄透明色的?如果使用CxImage::Stretchq行~放l制,l制透明色ƈ不会透明,而会原汁原味的将透明色如实的l制上去,l过试,使用CxImage::Draw2q个Ҏ~放l制是没有问题的.<img src ="http://m.shnenglu.com/tx7do/aggbug/194161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-11-01 15:05 <a href="http://m.shnenglu.com/tx7do/archive/2012/11/01/194161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IOCP+UDP收包的时??xC000000005Q读?x00000010错误的问?/title><link>http://m.shnenglu.com/tx7do/archive/2012/10/15/193298.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Mon, 15 Oct 2012 03:42:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/10/15/193298.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/193298.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/10/15/193298.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/193298.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/193298.html</trackback:ping><description><![CDATA[最q发现我那简单得不再单的IOCP+UDP的底层出错了,在大数据量的时候经怼报错,q且清一色都是报??xC000000005Q读?x00000010错误.报错之后,整个E序的堆栈就全部破坏掉了.从发现问题到今日问题的解?已经q去了一个月的时?<br />唯一能够扑ֈ相关的资料只?<a href="http://m.shnenglu.com/HendricLee/archive/2008/07/29/57436.html">http://m.shnenglu.com/HendricLee/archive/2008/07/29/57436.html</a><br />但是事实?我的Overlapped都是复用?因此,不大可能是此问题D?l过试证明,也确实与此无?<br />昨晚上又做了一pd的测?l果到最后依旧是无果,百般无奈之下,只好问h,后面QQ好友Sagasarate告诉了我原委,我知道之?只有两种感觉:惛_,x?<img border="0" alt="" src="http://m.shnenglu.com/Emoticons/QQ/02.gif" width="20" height="20" /><br />至于Z?L以下代码便知?非常非常之低U的错误.<br /> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">bool</span><span style="color: #000000"> CUDPRecvSendThread::postRecvRequest(CUdpOverLappedRecv</span><span style="color: #000000">*</span><span style="color: #000000"> pOverLappedRecv)<br /><img id="Codehighlighter1_78_626_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_626_Open_Text.style.display='none'; Codehighlighter1_78_626_Closed_Image.style.display='inline'; Codehighlighter1_78_626_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_78_626_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_78_626_Closed_Text.style.display='none'; Codehighlighter1_78_626_Open_Image.style.display='inline'; Codehighlighter1_78_626_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_78_626_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_78_626_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    ASSERT(pOverLappedRecv);<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pOverLappedRecv </span><span style="color: #000000">==</span><span style="color: #000000"> NULL) </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    pOverLappedRecv</span><span style="color: #000000">-></span><span style="color: #000000">Reset();<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    DWORD dwBytesRecv </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    DWORD dwFlags </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> nSenderAddrSize </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">sizeof</span><span style="color: #000000"> (sockaddr_in);<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> rc </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    rc </span><span style="color: #000000">=</span><span style="color: #000000"> ::WSARecvFrom(m_ServerSocket, pOverLappedRecv</span><span style="color: #000000">-></span><span style="color: #000000">GetWsaBuffer(), </span><span style="color: #000000">1</span><span style="color: #000000">, </span><span style="color: #000000">&</span><span style="color: #000000">dwBytesRecv, </span><span style="color: #000000">&</span><span style="color: #000000">dwFlags,<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />        pOverLappedRecv</span><span style="color: #000000">-></span><span style="color: #000000">GetClientAddr(), &nSenderAddrSize,<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />        pOverLappedRecv</span><span style="color: #000000">-></span><span style="color: #000000">GetOverlapped(), NULL);<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (rc </span><span style="color: #000000">==</span><span style="color: #000000"> SOCKET_ERROR)<br /><img id="Codehighlighter1_501_609_Open_Image" onclick="this.style.display='none'; Codehighlighter1_501_609_Open_Text.style.display='none'; Codehighlighter1_501_609_Closed_Image.style.display='inline'; Codehighlighter1_501_609_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_501_609_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_501_609_Closed_Text.style.display='none'; Codehighlighter1_501_609_Open_Image.style.display='inline'; Codehighlighter1_501_609_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_501_609_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_501_609_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />        DWORD dwErrorCode </span><span style="color: #000000">=</span><span style="color: #000000"> ::WSAGetLastError();<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (dwErrorCode </span><span style="color: #000000">!=</span><span style="color: #000000"> WSA_IO_PENDING)<br /><img id="Codehighlighter1_585_606_Open_Image" onclick="this.style.display='none'; Codehighlighter1_585_606_Open_Text.style.display='none'; Codehighlighter1_585_606_Closed_Image.style.display='inline'; Codehighlighter1_585_606_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_585_606_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_585_606_Closed_Text.style.display='none'; Codehighlighter1_585_606_Open_Image.style.display='inline'; Codehighlighter1_585_606_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_585_606_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_585_606_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>请对照着MSDN?<br />如果没看出来,那我来告诉你是ؓ什?<br />问题在于WSARecvFrom?个参?<br />MSDN的描q?<br /> <dt style="widows: 2; text-transform: none; text-indent: 0px; font: 12px/16px 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><em>lpFromlen</em><span id="o2uoogg" class="Apple-converted-space"> </span>[in, out] </dt><dd style="widows: 2; text-transform: none; text-indent: 0px; font: 12px/16px 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"> <p style="padding-bottom: 15px; line-height: 18px; margin-top: 0px; margin-bottom: 0px; color: #2a2a2a">A pointer to the size, in bytes, of the "from" buffer required only if<span id="wg2iakk" class="Apple-converted-space"> </span><em>lpFrom</em><span id="42c4yww" class="Apple-converted-space"> </span>is specified.<br /></p></dd> <p style="widows: 2; text-transform: none; text-indent: 0px; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; line-height: 16px; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-size: 10pt; ">你会发现,q个参数是一个输入输出?而WSARecvFrom投递的是一个异步的IOCPh,故?Z此方?</span><span style="font-size: 12px;">CUDPRecvSendThread::postRecvRequest</span><span style="font-size: 10pt; ">)之后,nSenderAddrSizeq个临时变量׃被回?不出事才怪了.</span><br /><span style="font-size: 10pt; ">好吧,q事是我干出来?今年竟是做一些脑D的事情.肿么了我q是.T_T</span><br /><span style="font-size: 10pt; ">要解册个问?最好的办法是把nSenderAddrSize作ؓCUdpOverLappedRecv的成员变量保?q样生命周期可以得以保证.</span><br /><span style="font-size: 10pt; ">好吧,qg脑残事就q么l了. </span></p><img src ="http://m.shnenglu.com/tx7do/aggbug/193298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-10-15 11:42 <a href="http://m.shnenglu.com/tx7do/archive/2012/10/15/193298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用FFMPEG SDKq行视频转码压羃时解决音视频不同步问题的Ҏhttp://m.shnenglu.com/tx7do/archive/2012/09/17/190953.html杨粼?/dc:creator>杨粼?/author>Mon, 17 Sep 2012 03:09:00 GMThttp://m.shnenglu.com/tx7do/archive/2012/09/17/190953.htmlhttp://m.shnenglu.com/tx7do/comments/190953.htmlhttp://m.shnenglu.com/tx7do/archive/2012/09/17/190953.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/190953.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/190953.html转蝲?http://blog.sina.com.cn/s/blog_6281e5750100vhn5.html

用FFMPEG SDKq行视频转码压羃的时候,转码成功后去看视频的内容Q发现音视频是不同步的。这个的是一个恼火的事情。我在用FFMPEG SDK做h264格式的FLV文g~码Filter的时候就到了这个问题?/p>

        l过研究发现QFFMPEG SDK写入视频的时候有两个地方用来控制写入的时间戳Q一个是AvPacket, 一个是AvFrame?在调用avcodec_encode_video的时候需要传入AvFrame的对象指针,也就是传入一帧未压羃的视频进行压~处理,AvFrame包含一个pts的参敎ͼq个参数是当前帧将来在q原播放的时候的旉戟뀂而AvPacket里面也有ptsQ还有dts。说赯个就必须要说明一下I,P,B三种视频压羃帧。I帧就是关键Q不依赖于其他视频QP帧是向前预测的Q只依赖于前面的视频帧,而B帧是双向预测视频帧,依赖于前后视频。由于B帧的存在Q因为它是双向的Q必ȝ道前面的视频帧和后面的视频的详l内容后Q才能知道本B帧最l该呈现什么图像。而pts和dts两个参数是用来控制视频帧的昄和解码的序?/p>

      pts是帧显C的序?/p>

      dts是帧被dq行解码的顺序?/p>

     如果没有B帧存在,dts和pts是相同的。反之,则是不相同的。关于这个的详细介绍可以参考一下mpeg的原理?/p>

再说说AvPacket中包含的pts和dts两个到底该设|什么|

pts和dts需要设|的是视频帧解码和昄的顺序。每增加一帧就加一Qƈ不是播放视频的时间戳?/p>

但是实践证明l过rmvb解码的视频有时候ƈ不是固定帧率的,而是变率的Q这P如果每压~一帧,pts和dts加一的方案ؓD韌频不同步?/p>

那怎么来解决音视频同步的问题呢Q?/p>

L如下代码Dc?/p>

lTimeStamp 是通过directshow 获取的当前的视频帧的旉戟?/p>

m_llframe_index为当前已l经q压~处理的帧的数量?/p>

首先av_rescale计算得到当前压羃处理已经需要处理什么时间戳的视频Q如果该旉戛_未到达directshow当前提供的视频的时间戳Q则该帧丢弃掉?/p>

否则q行压羃操作。ƈ讄AVPacket的pts和dts。这里假设B帧不存在?/p>

因ؓ在将来播攄时候视频以我们讑֮的固定播攑֓率进行播放,所以需要根据设定的播放帧率计算得到的视频旉戛_directshow提供的当前视频的时间戳q行比较Q设定是否需要进行实施g~播攄{略。如果需要g~播放,则将pts增加步长2Q否则以普通速度播放Q则讄?.dts与之相同?/p>

__int64 x = av_rescale(m_llframe_index,AV_TIME_BASE*(int64_t)c->time_base.num,c->time_base.den);

if( x > lTimeStamp )
{
return TRUE;
}

m_pVideoFrame2
->pts = lTimeStamp;
m_pVideoFrame2
->pict_type = 0;

int out_size = avcodec_encode_video( c, m_pvideo_outbuf, video_outbuf_size, m_pVideoFrame2 );

if (out_size > 0)
{
AVPacket pkt;
av_init_packet(
&pkt);

if( x > lTimeStamp )
{
   pkt.pts 
= pkt.dts = m_llframe_index;
   pkt.duration 
= 0;
}

else
{
   pkt.duration 
= (lTimeStamp - x)*c->time_base.den/1000000 + 1;
   pkt.pts 
= m_llframe_index;
   pkt.dts 
= pkt.pts;
   m_llframe_index 
+= pkt.duration;
}


//pkt.pts = lTimeStamp * (__int64)frame_rate.den / 1000;
if( c->coded_frame && c->coded_frame->key_frame )
{
    pkt.flags 
|= PKT_FLAG_KEY;
}


pkt.stream_index
= m_pVideoStream->index;
pkt.data
= m_pvideo_outbuf;
pkt.size
= out_size;


ret 
= av_interleaved_write_frame( m_pAvFormatContext, &pkt );
}

else
{
ret 
= 0;
}


 



]]>
ZDirectshow框架使用Windows渲染器VMR叠加水印http://m.shnenglu.com/tx7do/archive/2012/09/17/190951.html杨粼?/dc:creator>杨粼?/author>Mon, 17 Sep 2012 03:06:00 GMThttp://m.shnenglu.com/tx7do/archive/2012/09/17/190951.htmlhttp://m.shnenglu.com/tx7do/comments/190951.htmlhttp://m.shnenglu.com/tx7do/archive/2012/09/17/190951.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/190951.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/190951.htmlhttp://blog.sina.com.cn/s/blog_6281e5750100xdnj.html

对于windowspȝQEVR/VMR9/VMR渲染器均提供了叠加静态图片的接口Q?br />SetAlphaBitmapQ)Q?br /> 
此接口支持静态图片的资源使用方式Q一U是HDCQ一U是SURFACEQ?br />使用发现Q如果静态图片不规则Q是有Alpha通道的不同取值Ş成,
则通过HDC叠加的会有黑边存在;
 
对于EVR/VMR9可采用SURFACEQ用D3D创徏Q完水印效果相对容易实玎ͼ略过Q?br />对于VMR渲染器,SURFACE需要基于DirectDraw创徏d表面Q?br /> 
d表面创徏后,静态图片数据用决定着是否能完呈现水印效果;
一U是通过d表面获取HDCQ操作HDCQ把静态图片附加给d表面Q?br />一U是通过直接操作d表面的内存数据地址Q?br /> 
l过几天的摸索,实现了比较完的水印效果Q代码如下:
LPDIRECTDRAW7 lpDDraw7;
 
  
if(FAILED(DirectDrawCreateEx(NULL, (LPVOID *)&lpDDraw7, IID_IDirectDraw7, NULL)))
  
{
   
return ;
  }

 
if (FAILED(lpDDraw7->SetCooperativeLevel(m_hShowWin, DDSCL_NORMAL)))
 
{
  
return ;
 }

 
 DDSURFACEDESC2 ddsd;
 ZeroMemory(
&ddsd, sizeof(ddsd));
   ddsd.dwSize 
= sizeof(ddsd);
   ddsd.dwFlags 
= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
   ddsd.ddsCaps.dwCaps 
= DDSCAPS_OFFSCREENPLAIN;
   ddsd.dwWidth 
= xs;
 ddsd.dwHeight 
= ys;
  ddsd.ddpfPixelFormat.dwSize 
=sizeof(DDPIXELFORMAT);
  ddsd.ddpfPixelFormat.dwFlags 
=DDPF_RGB | DDPF_ALPHAPIXELS;
  ddsd.ddpfPixelFormat.dwRGBBitCount 
=32;
   ddsd.ddpfPixelFormat.dwRBitMask
=0x00ff0000;
   ddsd.ddpfPixelFormat.dwGBitMask
=0x0000ff00;
   ddsd.ddpfPixelFormat.dwBBitMask
=0x000000ff;
 ddsd.ddpfPixelFormat.dwRGBAlphaBitMask
=0xff000000;
  
if(FAILED(lpDDraw7->CreateSurface(&ddsd, lpSource, NULL)))
 
{
  
return ;
 }

 
 
lpSurface
->Restore();
  CImage img;
  HRESULT result;
  result 
= img.Load(_bstr_t(path));
  
if(!SUCCEEDED(result))
   
return ;
  LPBYTE lpBits 
= (LPBYTE)img.GetBits();
  
int nPitch = img.GetPitch();
  
int imgWidth = img.GetWidth();
  
int bpp = img.GetBPP();
  
if(bpp != 24 && bpp != 32)
   
return ;
 
  DDSURFACEDESC2 dds;
  ZeroMemory(
&dds,0,sizeof(dds));
  dds.dwSize   
=   sizeof(dds);
  
if(DD_OK != lpSurface->Lock(NULL, &dds, DDLOCK_WAIT, NULL))
   
return;
 
  LPBYTE dest 
= (LPBYTE)dds.lpSurface;
  
forint yPos = 0; yPos < img.GetHeight(); yPos++)
  
{
   LPBYTE lpBytes 
= lpBits + ( yPos * nPitch );
   
int width = img.GetWidth( ) * (bpp / 8);
 
   
forint xPos = 0; xPos < width; )
   
{
    
if(bpp == 24)
    
{
 
     
*dest++ = lpBytes[xPos ];
     
*dest++ = lpBytes[xPos + 1];
     
*dest++ = lpBytes[xPos + 2];
     
*dest++ = 0xff;
 
     xPos 
+= 3 ;
    }

    
else if(bpp == 32)
    
{
     
*dest++ = lpBytes[xPos];
     xPos 
++;
    }

   }

 
   dest 
+= dds.lPitch - width;
  }

  lpSurface
->Unlock(NULL);
静态图片的数据赋给d表面Q上面代码采用的是操作内存的方式Q如果采?br />lpSurface->GetDc(&hdc)的方式,然后通过BitBlt方式l制的话Qalpha通道会丢失,达不到水印的完美呈现

]]>
在activex控g工程中用directshow,~译时link错误的解x?/title><link>http://m.shnenglu.com/tx7do/archive/2012/08/17/187492.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Fri, 17 Aug 2012 09:01:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/08/17/187492.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/187492.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/08/17/187492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/187492.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/187492.html</trackback:ping><description><![CDATA[<div><strong style="color: red">转蝲?</strong><a style="color: red" ><strong>http://www.wangchao.net.cn/bbsdetail_839548.html</strong></a><br /><br /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/25px simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">错误为: <br />strmbase.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (<a href="mailto:g_Templates@@3PAVCFactoryTemplate@@A">g_Templates@@3PAVCFactoryTemplate@@A</a>) <br />strmbase.lib(dllentry.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (<a href='mailto:g_cTemplates@@3HA"g_cTemplates@@3HA'>g_cTemplates@@3HA"g_cTemplates@@3HA</a>)</span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/25px simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/25px simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">原因好像出在标准C上,与用户代码无兟?/span><br style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/25px simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/25px simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">----------------------------解决Ҏ--------------------------------------<br />加入<span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/25px simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">下面加上以下代码,重新~译卛_. <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_2_80_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_80_Open_Text.style.display='none'; Codehighlighter1_2_80_Closed_Image.style.display='inline'; Codehighlighter1_2_80_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_2_80_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2_80_Closed_Text.style.display='none'; Codehighlighter1_2_80_Open_Image.style.display='inline'; Codehighlighter1_2_80_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #000000">  </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2_80_Closed_Text">/**/</span><span id="Codehighlighter1_2_80_Open_Text"><span style="color: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">// </span><span style="color: #808080"></span></span><br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">  </span><span style="color: #008000">//</span><span style="color: #008000"> DllGetClassObject </span><span style="color: #008000"><br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #000000">  </span><span style="color: #0000ff">extern</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">C</span><span style="color: #000000">"</span><span style="color: #000000"> <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" />  STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID</span><span style="color: #000000">*</span><span style="color: #000000"> ppv) <br /><img id="Codehighlighter1_192_296_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_296_Open_Text.style.display='none'; Codehighlighter1_192_296_Closed_Image.style.display='inline'; Codehighlighter1_192_296_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_192_296_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_192_296_Closed_Text.style.display='none'; Codehighlighter1_192_296_Open_Image.style.display='inline'; Codehighlighter1_192_296_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif">  </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_192_296_Closed_Text"><img src="http://m.shnenglu.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_192_296_Open_Text"><span style="color: #000000">{ <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />  AFX_MANAGE_STATE(AfxGetStaticModuleState()); <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />  </span><span style="color: #0000ff">return</span><span style="color: #000000"> AfxDllGetClassObject(rclsid, riid, ppv); <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />  }</span></span><span style="color: #000000"> <br /><img id="Codehighlighter1_301_379_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_379_Open_Text.style.display='none'; Codehighlighter1_301_379_Closed_Image.style.display='inline'; Codehighlighter1_301_379_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_301_379_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_301_379_Closed_Text.style.display='none'; Codehighlighter1_301_379_Open_Image.style.display='inline'; Codehighlighter1_301_379_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif">  </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_301_379_Closed_Text">/**/</span><span id="Codehighlighter1_301_379_Open_Text"><span style="color: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">// </span><span style="color: #808080"></span></span><br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">  </span><span style="color: #008000">//</span><span style="color: #008000"> DllCanUnloadNow </span><span style="color: #008000"><br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #000000">  </span><span style="color: #0000ff">extern</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">C</span><span style="color: #000000">"</span><span style="color: #000000"> <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" alt="" />  STDAPI DllCanUnloadNow(</span><span style="color: #0000ff">void</span><span style="color: #000000">) <br /><img id="Codehighlighter1_450_535_Open_Image" onclick="this.style.display='none'; Codehighlighter1_450_535_Open_Text.style.display='none'; Codehighlighter1_450_535_Closed_Image.style.display='inline'; Codehighlighter1_450_535_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_450_535_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_450_535_Closed_Text.style.display='none'; Codehighlighter1_450_535_Open_Image.style.display='inline'; Codehighlighter1_450_535_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif">  </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_450_535_Closed_Text"><img src="http://m.shnenglu.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_450_535_Open_Text"><span style="color: #000000">{ <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />  AFX_MANAGE_STATE(AfxGetStaticModuleState()); <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" alt="" />  </span><span style="color: #0000ff">return</span><span style="color: #000000"> AfxDllCanUnloadNow(); <br /><img align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" />  }</span></span><span style="color: #000000"> <br /><img id="Codehighlighter1_540_616_Open_Image" onclick="this.style.display='none'; Codehighlighter1_540_616_Open_Text.style.display='none'; Codehighlighter1_540_616_Closed_Image.style.display='inline'; Codehighlighter1_540_616_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_540_616_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_540_616_Closed_Text.style.display='none'; Codehighlighter1_540_616_Open_Image.style.display='inline'; Codehighlighter1_540_616_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif">  </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_540_616_Closed_Text">/**/</span><span id="Codehighlighter1_540_616_Open_Text"><span style="color: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">/</span></div></span><br /><br /></span><br /></span></div><img src ="http://m.shnenglu.com/tx7do/aggbug/187492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-08-17 17:01 <a href="http://m.shnenglu.com/tx7do/archive/2012/08/17/187492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Windows下编译最新版本的Libjinglehttp://m.shnenglu.com/tx7do/archive/2012/07/18/184081.html杨粼?/dc:creator>杨粼?/author>Wed, 18 Jul 2012 09:02:00 GMThttp://m.shnenglu.com/tx7do/archive/2012/07/18/184081.htmlhttp://m.shnenglu.com/tx7do/comments/184081.htmlhttp://m.shnenglu.com/tx7do/archive/2012/07/18/184081.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/184081.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/184081.html阅读全文

]]>
IOCP包裹c?/title><link>http://m.shnenglu.com/tx7do/archive/2012/07/16/183777.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Mon, 16 Jul 2012 10:38:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/07/16/183777.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/183777.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/07/16/183777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/183777.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/183777.html</trackback:ping><description><![CDATA[头文Ӟ<br /> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000">/*</span><span style="color: #008000">*********************************************************************<br />* Copyright (C) 2008 -  - All Rights Reserved<br />*<br />* 文g名称:        IOCP.h<br />* ?nbsp;   ?        IOCP包裹c?br />*     <br />* ?nbsp;   ?        yanglinbo, <br />* ?nbsp;   ?        查看文g最下方.<br />* <br />**********************************************************************</span><span style="color: #008000">*/</span><br /><br />#ifndef __IOCP_H__<br /><span style="color: #0000ff">#define</span> __IOCP_H__<br /><br /><br />#include <assert.h><br />#include <WinSock2.h><br /><br /><br /><span style="color: #808080">////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">//<br /></span><span style="color: #808080">///</span><span style="color: #008000"> IOCP包装c,完成IOCP创徏Q关联等动作<br /></span><span style="color: #808080">////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">//</span><span style="color: #808080"><br /></span><span style="color: #0000ff">class</span> CIOCP<br />{<br /><span style="color: #0000ff">public</span>:<br />    CIOCP(<span style="color: #0000ff">int</span> nMaxConcurrency = -1);<br />    <span style="color: #0000ff">virtual</span> ~CIOCP(<span style="color: #0000ff">void</span>);<br /><br />    CIOCP& <span style="color: #0000ff">operator</span> = (<span style="color: #0000ff">const</span> CIOCP& rht);<br />    CIOCP& <span style="color: #0000ff">operator</span> = (<span style="color: #0000ff">const</span> HANDLE& rht);<br /><br />    <span style="color: #0000ff">operator</span> HANDLE() <span style="color: #0000ff">const</span>;<br /><br />    <span style="color: #808080">///</span><span style="color: #008000"> 创徏IOCP<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] nMaxConcurrency 最大线E数</span><span style="color: #808080"><br /></span>    BOOL Create(<span style="color: #0000ff">int</span> nMaxConcurrency);<br /><br />    <span style="color: #808080">///</span><span style="color: #008000"> 销毁IOCP</span><span style="color: #808080"><br /></span>    BOOL Destroy();<br /><br />    <span style="color: #808080">///</span><span style="color: #008000"> 完全端口是否有效</span><span style="color: #808080"><br /></span>    BOOL IsValid() <span style="color: #0000ff">const</span>;<br /><br />    <span style="color: #808080">///</span><span style="color: #008000"> 兌指定SOCKET及参数到IOCP<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] socket<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] CompKey</span><span style="color: #808080"><br /></span>    BOOL AssociateSocket(SOCKET socket, ULONG_PTR CompKey);<br /><br />    <span style="color: #808080">///</span><span style="color: #008000"> 发送通知到IOCP<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] CompKey<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] dwNumBytes<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] po</span><span style="color: #808080"><br /></span>    BOOL PostStatus(ULONG_PTR CompKey, DWORD dwNumBytes = 0, OVERLAPPED* po = NULL);<br /><br />    <span style="color: #808080">///</span><span style="color: #008000"> 取得IOCP状?br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] pCompKey<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] pdwNumBytes<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] ppo<br />    </span><span style="color: #808080">///</span><span style="color: #008000"> @param [in] dwMilliseconds</span><span style="color: #808080"><br /></span>    BOOL GetStatus(ULONG_PTR* pCompKey, PDWORD pdwNumBytes, OVERLAPPED** ppo, DWORD dwMilliseconds = INFINITE);<br /><br /><span style="color: #0000ff">private</span>:<br />    HANDLE        m_hIOCP;    <span style="color: #808080">///</span><span style="color: #808080">< IOCP句柄<br /></span><span style="color: #008000">};</span><span style="color: #808080"><br /></span><br /><br /><span style="color: #0000ff">#endif</span></div><br /><br />cpp文gQ?br /> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_281_Open_Text.style.display='none'; Codehighlighter1_0_281_Closed_Image.style.display='inline'; Codehighlighter1_0_281_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_281_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_281_Closed_Text.style.display='none'; Codehighlighter1_0_281_Open_Image.style.display='inline'; Codehighlighter1_0_281_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_281_Closed_Text">/**/</span><span id="Codehighlighter1_0_281_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">*********************************************************************<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />* Copyright (C) 2008 -  - All Rights Reserved<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />*<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />* 文g名称:        IOCP.cpp<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />* ?nbsp;   ?        IOCP包裹c?br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />*     <br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />* ?nbsp;   ?        yanglinbo, <br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />* ?nbsp;   ?        查看文g最下方.<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />* <br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />**********************************************************************</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />#include </span><span style="color: #000000">"</span><span style="color: #000000">StdAfx.h</span><span style="color: #000000">"</span><span style="color: #000000"> <br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />#include </span><span style="color: #000000">"</span><span style="color: #000000">IOCP.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_359_366_Open_Image" onclick="this.style.display='none'; Codehighlighter1_359_366_Open_Text.style.display='none'; Codehighlighter1_359_366_Closed_Image.style.display='inline'; Codehighlighter1_359_366_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_359_366_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_359_366_Closed_Text.style.display='none'; Codehighlighter1_359_366_Open_Image.style.display='inline'; Codehighlighter1_359_366_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif">CIOCP::CIOCP( </span><span style="color: #0000ff">int</span><span style="color: #000000"> nMaxConcurrency </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_359_366_Closed_Text">/**/</span><span id="Codehighlighter1_359_366_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">= -1</span><span style="color: #008000">*/</span></span><span style="color: #000000"> )<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />: m_hIOCP(INVALID_HANDLE_VALUE)<br /><img id="Codehighlighter1_402_465_Open_Image" onclick="this.style.display='none'; Codehighlighter1_402_465_Open_Text.style.display='none'; Codehighlighter1_402_465_Closed_Image.style.display='inline'; Codehighlighter1_402_465_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_402_465_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_402_465_Closed_Text.style.display='none'; Codehighlighter1_402_465_Open_Image.style.display='inline'; Codehighlighter1_402_465_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_402_465_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_402_465_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (nMaxConcurrency </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)<br /><img id="Codehighlighter1_433_463_Open_Image" onclick="this.style.display='none'; Codehighlighter1_433_463_Open_Text.style.display='none'; Codehighlighter1_433_463_Closed_Image.style.display='inline'; Codehighlighter1_433_463_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_433_463_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_433_463_Closed_Text.style.display='none'; Codehighlighter1_433_463_Open_Image.style.display='inline'; Codehighlighter1_433_463_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_433_463_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_433_463_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />        Create(nMaxConcurrency);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />CIOCP::</span><span style="color: #000000">~</span><span style="color: #000000">CIOCP( </span><span style="color: #0000ff">void</span><span style="color: #000000"> )<br /><img id="Codehighlighter1_490_504_Open_Image" onclick="this.style.display='none'; Codehighlighter1_490_504_Open_Text.style.display='none'; Codehighlighter1_490_504_Closed_Image.style.display='inline'; Codehighlighter1_490_504_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_490_504_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_490_504_Closed_Text.style.display='none'; Codehighlighter1_490_504_Open_Image.style.display='inline'; Codehighlighter1_490_504_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_490_504_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_490_504_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    Destroy();<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />CIOCP</span><span style="color: #000000">&</span><span style="color: #000000"> CIOCP::</span><span style="color: #0000ff">operator</span><span style="color: #000000">=</span><span style="color: #000000">( </span><span style="color: #0000ff">const</span><span style="color: #000000"> CIOCP</span><span style="color: #000000">&</span><span style="color: #000000"> rht )<br /><img id="Codehighlighter1_551_592_Open_Image" onclick="this.style.display='none'; Codehighlighter1_551_592_Open_Text.style.display='none'; Codehighlighter1_551_592_Closed_Image.style.display='inline'; Codehighlighter1_551_592_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_551_592_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_551_592_Closed_Text.style.display='none'; Codehighlighter1_551_592_Open_Image.style.display='inline'; Codehighlighter1_551_592_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_551_592_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_551_592_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    m_hIOCP </span><span style="color: #000000">=</span><span style="color: #000000"> rht.m_hIOCP;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />CIOCP</span><span style="color: #000000">&</span><span style="color: #000000"> CIOCP::</span><span style="color: #0000ff">operator</span><span style="color: #000000">=</span><span style="color: #000000">( </span><span style="color: #0000ff">const</span><span style="color: #000000"> HANDLE</span><span style="color: #000000">&</span><span style="color: #000000"> rht )<br /><img id="Codehighlighter1_640_673_Open_Image" onclick="this.style.display='none'; Codehighlighter1_640_673_Open_Text.style.display='none'; Codehighlighter1_640_673_Closed_Image.style.display='inline'; Codehighlighter1_640_673_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_640_673_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_640_673_Closed_Text.style.display='none'; Codehighlighter1_640_673_Open_Image.style.display='inline'; Codehighlighter1_640_673_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_640_673_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_640_673_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    m_hIOCP </span><span style="color: #000000">=</span><span style="color: #000000"> rht;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />CIOCP::</span><span style="color: #0000ff">operator</span><span style="color: #000000"> HANDLE() </span><span style="color: #0000ff">const</span><span style="color: #000000"><br /><img id="Codehighlighter1_707_758_Open_Image" onclick="this.style.display='none'; Codehighlighter1_707_758_Open_Text.style.display='none'; Codehighlighter1_707_758_Closed_Image.style.display='inline'; Codehighlighter1_707_758_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_707_758_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_707_758_Closed_Text.style.display='none'; Codehighlighter1_707_758_Open_Image.style.display='inline'; Codehighlighter1_707_758_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_707_758_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_707_758_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> (HANDLE)(</span><span style="color: #0000ff">this</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> NULL </span><span style="color: #000000">?</span><span style="color: #000000"> NULL : m_hIOCP);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />BOOL CIOCP::Create( </span><span style="color: #0000ff">int</span><span style="color: #000000"> nMaxConcurrency )<br /><img id="Codehighlighter1_803_929_Open_Image" onclick="this.style.display='none'; Codehighlighter1_803_929_Open_Text.style.display='none'; Codehighlighter1_803_929_Closed_Image.style.display='inline'; Codehighlighter1_803_929_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_803_929_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_803_929_Closed_Text.style.display='none'; Codehighlighter1_803_929_Open_Image.style.display='inline'; Codehighlighter1_803_929_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_803_929_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_803_929_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    m_hIOCP </span><span style="color: #000000">=</span><span style="color: #000000"> ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, </span><span style="color: #000000">0</span><span style="color: #000000">, nMaxConcurrency);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    ASSERT(IsValid());<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> IsValid();<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />BOOL CIOCP::Destroy()<br /><img id="Codehighlighter1_954_1086_Open_Image" onclick="this.style.display='none'; Codehighlighter1_954_1086_Open_Text.style.display='none'; Codehighlighter1_954_1086_Closed_Image.style.display='inline'; Codehighlighter1_954_1086_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_954_1086_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_954_1086_Closed_Text.style.display='none'; Codehighlighter1_954_1086_Open_Image.style.display='inline'; Codehighlighter1_954_1086_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_954_1086_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_954_1086_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (IsValid() </span><span style="color: #000000">==</span><span style="color: #000000"> FALSE) </span><span style="color: #0000ff">return</span><span style="color: #000000"> TRUE;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    BOOL bClosed </span><span style="color: #000000">=</span><span style="color: #000000"> ::CloseHandle(m_hIOCP);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    m_hIOCP </span><span style="color: #000000">=</span><span style="color: #000000"> INVALID_HANDLE_VALUE;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> bClosed;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />BOOL CIOCP::AssociateSocket( SOCKET socket, ULONG_PTR CompKey )<br /><img id="Codehighlighter1_1153_1291_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1153_1291_Open_Text.style.display='none'; Codehighlighter1_1153_1291_Closed_Image.style.display='inline'; Codehighlighter1_1153_1291_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1153_1291_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1153_1291_Closed_Text.style.display='none'; Codehighlighter1_1153_1291_Open_Image.style.display='inline'; Codehighlighter1_1153_1291_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1153_1291_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_1153_1291_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    ASSERT(IsValid());<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> ( IsValid() == FALSE ) </span><span style="color: #0000ff">return</span><span style="color: #000000"> FALSE;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> (::CreateIoCompletionPort((HANDLE)socket, m_hIOCP, CompKey, </span><span style="color: #000000">0</span><span style="color: #000000">) </span><span style="color: #000000">==</span><span style="color: #000000"> m_hIOCP);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_1354_1360_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1354_1360_Open_Text.style.display='none'; Codehighlighter1_1354_1360_Closed_Image.style.display='inline'; Codehighlighter1_1354_1360_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1354_1360_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1354_1360_Closed_Text.style.display='none'; Codehighlighter1_1354_1360_Open_Image.style.display='inline'; Codehighlighter1_1354_1360_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif">BOOL CIOCP::PostStatus( ULONG_PTR CompKey, DWORD dwNumBytes </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1354_1360_Closed_Text">/**/</span><span id="Codehighlighter1_1354_1360_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">= 0</span><span style="color: #008000">*/</span></span><span style="color: #000000">, OVERLAPPED</span><span style="color: #000000">*</span><span style="color: #000000"> po </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1378_1387_Closed_Text">/**/</span><span id="Codehighlighter1_1378_1387_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">= NULL</span><span style="color: #008000">*/</span></span><span style="color: #000000"> )<br /><img id="Codehighlighter1_1391_1517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1391_1517_Open_Text.style.display='none'; Codehighlighter1_1391_1517_Closed_Image.style.display='inline'; Codehighlighter1_1391_1517_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1391_1517_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1391_1517_Closed_Text.style.display='none'; Codehighlighter1_1391_1517_Open_Image.style.display='inline'; Codehighlighter1_1391_1517_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1391_1517_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_1391_1517_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    ASSERT(IsValid());<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> ( IsValid() == FALSE ) </span><span style="color: #0000ff">return</span><span style="color: #000000"> FALSE;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> ::PostQueuedCompletionStatus(m_hIOCP, dwNumBytes, CompKey, po);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_1623_1636_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1623_1636_Open_Text.style.display='none'; Codehighlighter1_1623_1636_Closed_Image.style.display='inline'; Codehighlighter1_1623_1636_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1623_1636_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1623_1636_Closed_Text.style.display='none'; Codehighlighter1_1623_1636_Open_Image.style.display='inline'; Codehighlighter1_1623_1636_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif">BOOL CIOCP::GetStatus( ULONG_PTR</span><span style="color: #000000">*</span><span style="color: #000000"> pCompKey, PDWORD pdwNumBytes, OVERLAPPED</span><span style="color: #000000">**</span><span style="color: #000000"> ppo, DWORD dwMilliseconds </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1623_1636_Closed_Text">/**/</span><span id="Codehighlighter1_1623_1636_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">= INFINITE</span><span style="color: #008000">*/</span></span><span style="color: #000000"> )<br /><img id="Codehighlighter1_1640_1784_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1640_1784_Open_Text.style.display='none'; Codehighlighter1_1640_1784_Closed_Image.style.display='inline'; Codehighlighter1_1640_1784_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1640_1784_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1640_1784_Closed_Text.style.display='none'; Codehighlighter1_1640_1784_Open_Image.style.display='inline'; Codehighlighter1_1640_1784_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1640_1784_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_1640_1784_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    ASSERT(IsValid());<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> ( IsValid() == FALSE ) </span><span style="color: #0000ff">return</span><span style="color: #000000"> FALSE;<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> ::GetQueuedCompletionStatus(m_hIOCP, pdwNumBytes, pCompKey, ppo, dwMilliseconds);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" />BOOL CIOCP::IsValid() </span><span style="color: #0000ff">const</span><span style="color: #000000"><br /><img id="Codehighlighter1_1815_1881_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1815_1881_Open_Text.style.display='none'; Codehighlighter1_1815_1881_Closed_Image.style.display='inline'; Codehighlighter1_1815_1881_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_1815_1881_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1815_1881_Closed_Text.style.display='none'; Codehighlighter1_1815_1881_Open_Image.style.display='inline'; Codehighlighter1_1815_1881_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1815_1881_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_1815_1881_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> (m_hIOCP </span><span style="color: #000000">!=</span><span style="color: #000000"> NULL) </span><span style="color: #000000">&&</span><span style="color: #000000"> (m_hIOCP </span><span style="color: #000000">!=</span><span style="color: #000000"> INVALID_HANDLE_VALUE);<br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" /></span></div><img src ="http://m.shnenglu.com/tx7do/aggbug/183777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-07-16 18:38 <a href="http://m.shnenglu.com/tx7do/archive/2012/07/16/183777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自绘CListCtrl防止闪烁的方?/title><link>http://m.shnenglu.com/tx7do/archive/2012/01/13/164085.html</link><dc:creator>杨粼?/dc:creator><author>杨粼?/author><pubDate>Thu, 12 Jan 2012 16:16:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/archive/2012/01/13/164085.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/164085.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/archive/2012/01/13/164085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/164085.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/164085.html</trackback:ping><description><![CDATA[<strong style="color: red">转蝲自:</strong><a style="color: red" ><strong>http://blog.csdn.net/mynamelj/article/details/6571383</strong></a><br /><br /><span style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"> <p>自绘控g中经怼遇到闪烁的问题,主要原因是某个区域发生了重复性的l制而导致的Q而列表控件在自绘后闪烁原因是<strong>WM_ERASEBKGND</strong>消息所D的。解军_办法可以这个消息屏蔽掉Q然后用双~存Q在Windows 5.1版本以后可以使用<a style="color: rgb(51,102,153); text-decoration: none" name="LVS_EX_DOUBLEBUFFER"><strong>LVS_EX_DOUBLEBUFFER</strong></a>样式Qؓ了各个版本的兼容性我个h不徏议用这个样式,因此我们可以拦截WM_PAINT消息来用我们自已创建的双缓存,具体看代码所C:</p></span><br class="Apple-interchange-newline" /><span style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"> 1.屏蔽WM_ERASEBKGND消息 <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">BOOL CMyListCtrl::OnEraseBkgnd(CDC </span><span style="color: #000000">*</span><span style="color: #000000"> pDC)  <br /><img id="Codehighlighter1_44_68_Open_Image" onclick="this.style.display='none'; Codehighlighter1_44_68_Open_Text.style.display='none'; Codehighlighter1_44_68_Closed_Image.style.display='inline'; Codehighlighter1_44_68_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_44_68_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_44_68_Closed_Text.style.display='none'; Codehighlighter1_44_68_Open_Image.style.display='inline'; Codehighlighter1_44_68_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_44_68_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_44_68_Open_Text"><span style="color: #000000">{  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> FALSE;  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div></span><br /><span style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span">2.在WM_PAINT消息?font color="#333333">使用自已的双~存</font> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">void</span><span style="color: #000000"> CMyListCtrl::OnPaint()  <br /><img id="Codehighlighter1_30_1126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_1126_Open_Text.style.display='none'; Codehighlighter1_30_1126_Closed_Image.style.display='inline'; Codehighlighter1_30_1126_Closed_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_30_1126_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_30_1126_Closed_Text.style.display='none'; Codehighlighter1_30_1126_Open_Image.style.display='inline'; Codehighlighter1_30_1126_Open_Text.style.display='inline';" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_30_1126_Closed_Text"><img alt="" src="http://m.shnenglu.com/Images/dot.gif" /></span><span id="Codehighlighter1_30_1126_Open_Text"><span style="color: #000000">{  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    CPaintDC dc(</span><span style="color: #0000ff">this</span><span style="color: #000000">);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    CRect rcClient,rcClip,rcHeader;  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    GetClientRect(</span><span style="color: #000000">&</span><span style="color: #000000">rcClient);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    GetHeaderCtrl()</span><span style="color: #000000">-></span><span style="color: #000000">GetWindowRect(</span><span style="color: #000000">&</span><span style="color: #000000">rcHeader);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    dc.GetClipBox(</span><span style="color: #000000">&</span><span style="color: #000000">rcClip);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    CDC MemDC;  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    CBitmap MemBitmap, </span><span style="color: #000000">*</span><span style="color: #000000">pOldBitmap;  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.CreateCompatibleDC(</span><span style="color: #000000">&</span><span style="color: #000000">dc);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> nMode </span><span style="color: #000000">=</span><span style="color: #000000"> MemDC.SetMapMode(dc.GetMapMode());  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemBitmap.CreateCompatibleBitmap(</span><span style="color: #000000">&</span><span style="color: #000000">dc,rcClient.Width(),rcClient.Height());  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    pOldBitmap </span><span style="color: #000000">=</span><span style="color: #000000"> MemDC.SelectObject(</span><span style="color: #000000">&</span><span style="color: #000000">MemBitmap);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.FillSolidRect(</span><span style="color: #000000">&</span><span style="color: #000000">rcClient,GetBkColor());  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    CRgn rgn;  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    rgn.CreateRectRgn(rcClip.left,rcClip.top,rcClip.right,rcClip.bottom);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.SelectClipRgn(</span><span style="color: #000000">&</span><span style="color: #000000">rgn);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    DefWindowProc(WM_PAINT,(WPARAM)MemDC.m_hDC,(LPARAM)</span><span style="color: #000000">0</span><span style="color: #000000">);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.SelectClipRgn(NULL);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (rcClip.top </span><span style="color: #000000"><</span><span style="color: #000000"> rcHeader.Height())  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />        rcClip.top </span><span style="color: #000000">=</span><span style="color: #000000"> rcHeader.Height();  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    dc.BitBlt(rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),</span><span style="color: #000000">&</span><span style="color: #000000">MemDC,rcClip.left,rcClip.top,SRCCOPY);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.SetMapMode(nMode);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.SelectObject(pOldBitmap);  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemDC.DeleteDC();  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    MemBitmap.DeleteObject();  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/InBlock.gif" />    rgn.DeleteObject();  <br /><img alt="" align="top" src="http://m.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div></span><br /><img src ="http://m.shnenglu.com/tx7do/aggbug/164085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">杨粼?/a> 2012-01-13 00:16 <a href="http://m.shnenglu.com/tx7do/archive/2012/01/13/164085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.zhzzbjb.cn" target="_blank">Ʒþþþ</a>| <a href="http://www.uzxin.cn" target="_blank">þۺ97ɫһһ</a>| <a href="http://www.yzx777.cn" target="_blank">þƵվ</a>| <a href="http://www.bosot.cn" target="_blank">Ʒ99þþþþö</a>| <a href="http://www.92mb.cn" target="_blank">ŷ龫Ʒþþþþþþžž</a>| <a href="http://www.ahlgw.cn" target="_blank">þþƷѿ</a>| <a href="http://www.jrsddk.cn" target="_blank">þþþþϸApp</a>| <a href="http://www.tongshi8.cn" target="_blank">þۺۺϾþۺ</a>| <a href="http://www.worktrotter.cn" target="_blank">þerƷѹۿ2</a>| <a href="http://www.dyssnv.cn" target="_blank">þ޾Ʒ벥</a>| <a href="http://www.joyq.com.cn" target="_blank">˾þô߽av </a>| <a href="http://www.gx177.cn" target="_blank">޾Ʒtvþþþþþþ</a>| <a href="http://www.daliandamingda.cn" target="_blank">Ʒþþþþù˽</a>| <a href="http://www.seostars.cn" target="_blank">޾Ʒþþ</a>| <a href="http://www.xcfsfl.cn" target="_blank">www.þ</a>| <a href="http://www.vjyg.cn" target="_blank">AVþþƷ</a>| <a href="http://www.sobseo.cn" target="_blank">þòþüӰԺwwwձ</a>| <a href="http://www.enetbase.cn" target="_blank">þþƷ99Ʒ</a>| <a href="http://www.zkduo.cn" target="_blank">þûƵ</a>| <a href="http://www.rnsqwp.cn" target="_blank">ƷۺϾþþþþ97 </a>| <a href="http://www.anglein.cn" target="_blank">ŷƷһþ</a>| <a href="http://www.91zuoai.cn" target="_blank">Vþþ</a>| <a href="http://www.lakesys.com.cn" target="_blank">ŷ޾Ʒ˾þ</a>| <a href="http://www.todd3015.cn" target="_blank">ƷžžþƵ</a>| <a href="http://www.huaigutang.cn" target="_blank">þþþþùƷ</a>| <a href="http://www.huacai0019.cn" target="_blank">þþþ޾Ʒַ</a>| <a href="http://www.52wysq.cn" target="_blank">ձƬҹþ</a>| <a href="http://www.keyuehua.cn" target="_blank">þ99þ99Ʒӿ</a>| <a href="http://www.g549.cn" target="_blank">޾ƷƷþ99һ</a>| <a href="http://www.kouziye.cn" target="_blank">ӰһѾþþþþþþ </a>| <a href="http://www.yicheng688.cn" target="_blank">AvƷþ</a>| <a href="http://www.athj.cn" target="_blank">þۺϾþۺϾɫ</a>| <a href="http://www.hhmag.cn" target="_blank">ݺɫþۺ</a>| <a href="http://www.uqbg.cn" target="_blank">þþþ99ƷƬŷ</a>| <a href="http://www.zaggaa.cn" target="_blank">99þþƷѿһ</a>| <a href="http://www.sd43.cn" target="_blank">þۺ϶</a>| <a href="http://www.rainbows.net.cn" target="_blank">99þ˾ƷۺϹۿ</a>| <a href="http://www.uniontruck.cn" target="_blank">þþƷӰѿ</a>| <a href="http://www.buding-00.cn" target="_blank">þerƷѹۿ2</a>| <a href="http://www.093156.net.cn" target="_blank">þþƷһ</a>| <a href="http://www.commonsoft.cn" target="_blank">avttþþƷ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>