
Thread
benny5609
普通得不能再普通的80年代后
展开
-
多线程基本1
Critical section(临界区)用来实现“排他性占有”。适合范围是单一进程的各线程之间。它是: 1,一个局部性对象,不是一个核心对象。 2,快速而有效率。 3,不能够同时有一个以上的critical seciton被等待。 4,无法侦测是否被某个线程放弃。 Mutex是一个核心对象,可以再不同的线程之间实现“排他性占有”,甚至记是那原创 2007-09-17 19:01:00 · 738 阅读 · 0 评论 -
什么才是多线程安全的
对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。所以学习多线程编程最重要的不是学习API,而是理解什么才是多线程安全的代码从例子说起#include windows.h>#include process.h>long global1 = 0;volatile long global2 = 0;class MyClass{p原创 2007-12-06 22:47:00 · 1111 阅读 · 0 评论 -
WIN32多线程程序设计学习笔记(第四章 下 第五章)
终于又看>了;开卷有益,今天看了第四章后半部分,感觉颇有收获;以前对EVENT这个核心对象,用起来总是心中没底,看了EVENT的介绍也是似懂非懂的。哈!今天看了以后,真有神助,我觉得应该是搞懂了(自以为事J)。仔细想想,应该是记笔记的功劳,用脑筋写过的东西还真是不容易忘记咧!!!不但印象深刻,而且助我理解了EVENT。 好了,闲话少说,进入正题吧!从第三章以来,每一章都必不可少的用到了原创 2007-09-17 20:09:00 · 865 阅读 · 0 评论 -
WIN32多线程程序设计学习笔记(第四章 上)
WIN32多线程程序设计学习笔记(第四章 上) 到目前为止,我已经知道如何创建线程,销毁线程及如何判断一个线程是否结束了;但运用线程,管理线程,如何使线程按自己意愿正确运行才是多线程程序设计的重点及难点。 大家知道,线程具有并发性,在同一时间段会存在多个线程,当这些线程同时存取同一数据时,就会有问题。就像在超市储物品一样,来的时候物品箱是空,转身拿物品准备储的时候,发现物品箱已被占原创 2007-09-17 20:06:00 · 842 阅读 · 0 评论 -
《Win32多线程程序设计》学习笔记(一)—— 线程初步认识
产生一个新线程,是以CreateThread开始的。HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes DWORD dwStackSize, // initial thread stack size原创 2007-09-17 20:03:00 · 926 阅读 · 0 评论 -
Windows多线程多任务设计初步
前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的应用软件无一不是多线程多任务处理,单线城的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员原创 2007-09-17 19:50:00 · 887 阅读 · 0 评论 -
WIN32多线程程序设计学习笔记(第二章)
WIN32多线程程序设计学习笔记(第二章) 《WIN32多线程程序设计》这本书也看了好多遍,但总是觉得印象不深;我想是不是应该做做笔记,一来可以加深一下印象。二也在可以在用时方便查阅。J 首先,我觉得线程一点都不难(这样的心理暗示会使我觉得学的轻松一些);why? 与调用函数的过程类似;线程只不过用CreateThread的API将函数HANDLE hThread =原创 2007-09-17 20:04:00 · 879 阅读 · 0 评论 -
VC中多线程编程
一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延原创 2007-09-17 18:57:00 · 924 阅读 · 0 评论 -
多任务、进程和线程
Windows是一个多任务操作系统。传统的Windows 3.x只能依靠应用程序之间的协同来实现协同式多任务,而Windows 95/NT实行的是抢先式多任务。 在Win 32(95/NT)中,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个任务。对于象通信程序这样既要进行耗时的工作,又要保持对用户输入响应的应用来说,使用多线程是最佳选择。当进程使用多个线程时,需要采取适当原创 2007-09-17 16:48:00 · 3205 阅读 · 0 评论 -
WINDOWS核心编程之进程(二)
1.进程的实例句柄加载到进程地址空间的每个可执行文件或DLL文件均被产生一个唯一的实例句柄,就是hinstExe参数.有些这个参数的类型为HMODULE类型,注意:这两个类型是完全相同的对象。原因在于16位的Windows中,HMODULE和HINSTANCE用于标识不同的东西。 当你在vc的环境里的link里category选ouput有个base ,这标识着可执行文件的映像加载原创 2007-09-16 10:18:00 · 1055 阅读 · 0 评论 -
WINDOWS核心编程之进程(一)
从今天开始说说进程 进程通常被定义为一人正在运行的程序的实例,它由两个部分组成:1. 一个是操作系统用来管理进程的内核对象,内核对象也是系统用来存放关于进程的统计信息的地方。2. 另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。 要使进程完成某项操作,它必须要有一个自已的线程,来执行原创 2007-09-16 10:16:00 · 936 阅读 · 0 评论 -
Windows平台下的多线程编程
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程原创 2007-09-16 09:40:00 · 856 阅读 · 0 评论 -
WIN32多线程程序设计学习笔记(第六章 下)
继续。。。上面的程序片段使用WaitForMultipleObjects函数来等待,会有两个问题:第一、 只能等待小于64个的对象,这是WaitForMultipleObjects函数本身所带来的限制。第二、 你必须不断根据“哪一个handle被激发”而计算如何处理。那个这个程序的结构可不是很清晰,以后维护可不方便 那么书上在这里提供了一个异步过程调用(APCs原创 2007-09-17 20:11:00 · 801 阅读 · 0 评论 -
WIN32多线程程序设计学习笔记(第六章 上)
我们知道当程序调用I/O设备处理一些事情时,让主程序停下来干等I/O的完成是没有效率的。对这个问题有下面几种解决方法:方法一:使用另一个线程进行I/O。但从以前的学习中也知道,协调线程间的关系是一件麻烦的事情,需要小心的设计;所以这个方案可行,但是麻烦。方法二:使用overlapped I/O。正如书上所说:“overlapped I/O是WIN32的一项技术,你可以要求操作系统为你传送数原创 2007-09-17 20:10:00 · 908 阅读 · 0 评论 -
WIN32多线程程序设计学习笔记(第三章)
通过在上一章的学习,我学会使用GetExitCodeThread()这个函数来判断一个线程是否还在执行。通过这个函数,我就可以对付“某个线程必须在某个线程结束后才能运行”的情况。复习一下:程序片段: for ( ; ; ) { int rc; rc原创 2007-09-17 20:05:00 · 816 阅读 · 0 评论 -
使用PostThreadMessage在Win32线程间传递消息
PostThreadMessage的原型是这样的BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam);PostThreadMessage可以用于线程之间的异步通讯,因为它不用等待调用者返回,这也许是线程通讯中最简单的一种方法了。但是要注意以下问题1 .PostThread原创 2007-12-06 22:48:00 · 1218 阅读 · 0 评论