摘要:
1.Windows 的历史中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状。所以,我的介绍性开场白通常会以一段历史开始。不过,我不会以精确到年月日的那种方式详细讲述,而是选取几个对我们的编程生涯有重要影响的关键点。Windows 是真正的图形化界面操作系统的普及者,无论任何人,争夺什么第一个实现的GUI、第一个商业化的GUI之类的虚名,都替代不了 Windows 的历史功绩,让最普通的用户能够容易地操纵PC。第一个声名大噪的版本是Windows 3.0(也有人认为应该是它的更加健康强壮的弟弟Windows 3.1),从那个
阅读全文
posted @ 2014-04-06 19:56
bitbit
阅读(19173)
推荐(10)
编辑
摘要:
1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量、自定义消息和事件对象等来实现的。其中又以对全局变量的使用最为简洁。该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制。 由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明。使用全局变量进行线程通信的方法非常简单,通过下面给出的示例代码能够对其有一个基本的认识。 // 线程通信用全局变量 volatile bool g_bDo = false; …… //线程处理函数 UINT ThreadProc5(LPVOID pP
阅读全文
posted @ 2014-04-06 19:30
bitbit
阅读(2175)
推荐(0)
编辑
摘要:
volatile 修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局变量来说,volatile 是一个非常重要的修饰符.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1).并行设备的硬件寄存器(如:状态寄存器) 2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables) 3).多线程应用
阅读全文
posted @ 2014-04-06 19:28
bitbit
阅读(941)
推荐(0)
编辑
摘要:
http://www.cppblog.com/beautykingdom/archive/2008/07/09/55760.aspx?opt=admin在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱...
阅读全文
posted @ 2014-04-06 17:15
bitbit
阅读(4305)
推荐(0)
编辑
摘要:
这是整理孙鑫VC得到的关于线程同步方面的笔记.n 事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。n 有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。得到事件对象后,因为是自动重置的事件对象,所以操作系统将该事件对象设置为非信号状态//-------------------------------------
阅读全文
posted @ 2014-04-06 10:26
bitbit
阅读(427)
推荐(0)
编辑
摘要:
VC MFC中线程同步对象的区别临界区 CCriticalSection,在用户模式工作,适用于保护线程间共享资源,一个线程可以多次Lock不会出错。不支持在多进程之间工作。互斥量 CMutex,在内核模式工作,除了支持临界区的功能,还可以为互斥量命名,以便在多进程中工作。互斥量比临界区耗资源。 事件 CEvent,在内核模式工作,适用于一个线程等待另一个线程完成某任务。信号量 CSemaphore,在内核模式工作,适用于允许特定个数的线程执行某任务。 实例:CwinThread *pThread;1、使用互斥对象 HANDLE hMutex; hMutex = .
阅读全文
posted @ 2014-04-06 10:19
bitbit
阅读(934)
推荐(0)
编辑
摘要:
退出线程可以有四种方法:1.线程函数的return返回(最好这样): 其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要): 如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露...
阅读全文
posted @ 2014-04-06 10:14
bitbit
阅读(17482)
推荐(0)
编辑