李sir_Blog

博客园 首页 联系 订阅 管理
上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 71 下一页

2011年1月13日

摘要: 简介  线程之间通信的两个基本问题是互斥和同步。  线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。  线程互斥是指对于共享的操作系统资源(指的是广义的"资源",而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。  线程互斥是一种特殊的线程同步。  实际上,互斥和同步对应着线程间通信发生的两种情况:  (1)当有多个线程访问共享资源而 阅读全文
posted @ 2011-01-13 19:17 李sir 阅读(673) 评论(0) 推荐(0)

摘要: 4. MFC线程、消息队列与MFC程序的"生死因果"  分析MFC程序的主线程启动及消息队列处理的过程将有助于我们进一步理解UI线程与消息队列的关系,为此我们需要简单地叙述一下MFC程序的"生死因果"(侯捷:《深入浅出MFC》)。  使用VC++ 6.0的向导完成一个最简单的单文档架构MFC应用程序MFCThread:  (1) 输入MFC EXE工程名MFCThread;  (2) 选择单文档架构,不支持Document/View结构;  (3) ActiveX、3D container等其他选项都选择无。  我们来分析这个工程。下面是产生的核心源代码: MFCThread.h 文件clas 阅读全文
posted @ 2011-01-13 19:12 李sir 阅读(579) 评论(0) 推荐(0)

摘要: 、创建和终止线程  在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。  工作者线程CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数 int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级 UINT nStackSize = 0, //线程的堆栈大小 DWORD dwCreateFlags = 0, //线程的创建标志 LP 阅读全文
posted @ 2011-01-13 19:01 李sir 阅读(889) 评论(0) 推荐(0)

摘要: 最近,由于需求推动,自己得开始学一下在windows下如何开发驱动程序。 虽然,后来由于其他的原因使得学习没继续下去,但是我还是把一些粗略的学习经历与体会写在这里,方便自己日后卷土重来,也方便其他的对windows开发一窍不通的有志之士参考一下。(一)开发的目的我为什么要学这些知识呢? 原因是想弄远程的硬件控制,用一个简单的例子来说明就是做个软件能使得:我用自己的机子播放音频文件的时候,可在别人的机子上发出声音。一开始的方案是把整个软件划分成3部分:控制端部分、网络部分、受控端部分。 在控制端部分,自己是希望能做成类似total recorder里面的虚拟声卡,播放软件把数据包发给驱动程序后, 阅读全文
posted @ 2011-01-13 18:36 李sir 阅读(1208) 评论(0) 推荐(0)

摘要: 在浅尝boost之timer的post里,我提到boost::timer在linux和windows下的不同表现,并用ACE_OS::gettimeofday做了一个替代方案。不过,为了这个功能把ACE的DLL绑到一起,感觉不是那么愉快。 下面是另一个方案,利用boost::date_time库来解决#includeboost/date_time/posix_time/posix_time.hppclassElapsedTime{public:ElapsedTime():start_time_(boost::posix_time::microsec_clock::local_time()) 阅读全文
posted @ 2011-01-13 18:19 李sir 阅读(583) 评论(0) 推荐(0)

摘要: 我一直是在努力推介boost,因为boost是一块美玉,但,没有什么是完美的。现在,我将暴露出boost的一点瑕疵:boost::timer。虽说是瑕不掩瑜,但瑕疵就是瑕疵。先看一看下面的例子: //win2000中vc7.1编译运行 boost::timert; Sleep(1000); coutt.elapsed()endl; //redhat9中gcc3.2.3编译运行 boost::timert; sleep(1); coutt.elapsed()endl; 他们的结果是一样吗?不同的操作系统,时钟精度是不一样,结果自然不完全一样;但我说的不一样不是这一点小小的差异, 阅读全文
posted @ 2011-01-13 18:18 李sir 阅读(1775) 评论(0) 推荐(0)

摘要: Table11.5.Erase/Replace Algorithm nameDescriptionFunctionsreplace/erase_firstReplace/Erase the first occurrence of a string in the inputreplace_first() replace_first_copy() ireplace_first() ireplace_first_copy() erase_first() erase_first_copy() ierase_first() ierase_first_copy() replace/erase_lastRe 阅读全文
posted @ 2011-01-13 18:17 李sir 阅读(926) 评论(0) 推荐(0)

摘要: Table11.4.Find algorithms Algorithm nameDescriptionFunctionsfind_firstFind the first occurrence of a string in the inputfind_first() ifind_first() find_lastFind the last occurrence of a string in the inputfind_last() ifind_last() find_nthFind the nth (zero-indexed) occurrence of a string in the inpu 阅读全文
posted @ 2011-01-13 18:15 李sir 阅读(1438) 评论(0) 推荐(0)

摘要: Table11.3.PredicatesAlgorithm nameDescriptionFunctionsstarts_withCheck if a string is a prefix of the other onestarts_with()istarts_with() ends_withCheck if a string is a suffix of the other oneends_with()iends_with() containsCheck if a string is contained of the other onecontains()icontains() equal 阅读全文
posted @ 2011-01-13 18:13 李sir 阅读(601) 评论(0) 推荐(0)

摘要: Boost String Algorithms Library 是很有用的一个库,它让C++程序员不用一次又一次的为了字符串的处理制造一些小小的轮子。这里我将逐一用实例详细的说明每一个函数的使用,希望给自己给同道带来方便。 Boost String Algorithms Library 是很有用的一个库,它让C++程序员不用一次又一次的为了字符串的处理制造一些小小的轮子。《浅尝boost之String algorithms library》里我主要介绍了它的Split ,因为这个功能很出彩,其它则一带而过。不过,当多次向朋友推荐这个库后,反馈得到的信息让我觉得详细列出其每一个函数的使用,作为一 阅读全文
posted @ 2011-01-13 17:36 李sir 阅读(589) 评论(0) 推荐(0)

上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 71 下一页