一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档. 理解多线程及其同步.互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控制也非常容易.许多程序员从来没有学习过嵌入式系统领域著名的操作系统Vx…
  一.线程间数据通信 系统从进程的地址空间中分配内存给线程栈使用.新线程与创建它的线程在相同的进程上下文中运行.因此,新线程可以访问进程内核对象的所有句柄.进程中的所有内存以及同一个进程中其他所有线程的栈.这样一来,同一个进程中的多个线程可以很容易的相互通信. 到目前为止,将数据从一个线程传到另一个线程的惟一方法是在创建线程时传递给新线程一个指针参数(LPVOID lpParam).参数lpParam为LPVOID指针类型,我们可在其中存储普通的数值(size为平台地址总线宽度),也可以存放指…
Win32多线程的创建方法主要有: (1)CreateThread() (2)_beginthread()&&_beginthreadex() (3)AfxBeginThread() (4)CWinThread类 (1)CreateThread() 百度百科:http://baike.baidu.com/view/1191444.htm 函数原型: view plaincopy to clipboardprint?01.HANDLE CreateThread(02. LPSECURITY_…
1.知识回顾,简要概述 前面两篇关于Task的随笔,C# 多线程五之Task(任务)一 和 C# 多线程六之Task(任务)二,介绍了关于Task的一些基本的用法,以及一些使用的要点,如果都看懂了,本文将介绍另一个Task的特殊用法,前面介绍了,如何通过一个父任务创建多个子任务,且这些子任务都必须要支持取消的例子,常规做法是,通过new 一个Task数组对象,然后在该对象的内部创建多个Task任务,然后给这些任务指定TaskCreationOptions.AttachedToParent,这样所…
一.定义: 1.进程和线程的区别 进程:是程序的执行过程,具有动态性,即运行的程序就叫进程,不运行就叫程序 ,每个进程包含一到多个线程.线程:系统中的最小执行单元,同一进程中有多个线程,线程可以共享资源,一旦出现共享资源,必须注意线程安全!! 先阐述一下进程和线程的概念和区别,这是一个许多大学老师也讲不清楚的问题. 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个…
#include<Windows.h> #include<iostream> using namespace std; /*1.在启动一个线程之前,必须为线程编写一个全局的线程函数, * 这个线程函数接受一个32位的LPVOID(没有类型的指针)作为参数,返回一个DWORD *这里建了两个全局的线程函数ThreadFuncFirst,ThreadFuncSecond*/ DWORD WINAPI ThreadFuncFirst(LPVOID param) { //DWORD:32位…
之前看侯捷翻译的<win32多线程程序设计>中关于线程同步中的临界区问题,其中举得例子是对链表的操作.死锁的问题是对一个Swaplist函数的问题,现列举代码如下: void SwapLists(List *list, List *list2){ List *tmp_list; EnterCriticalSection(list1->critical_sec); EnterCriticalSection(list2->critical_sec); tmp->list = li…
  内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Services API.例如我们调用Kernel32.dll中的CreateFile创建文件,最终将执行ntdll.dll中的系统服务NtCreateFile. 内核为我们创建的文件对象以内核级数据结构FILE_OBJECT存储管理,内核级文件信息数据结构包括FILE_BASIC_INFORMATION.…
使用overlapped I/O并搭配event对象-----win32多线程-异步(asynchronous) I/O事例,会产生两个基础性问题. 第一个问题是,使用WaitForMultipleObjects(),你只能等待最多达MAXIMUM_WAIT_OBJECTS个对象,在Windows NT中此值最大为64. 第二个问题是,你必须不断根据“那一个handle被激发”而计算如何反应.你必须有一个分派表格(dispatch table)和WaitForMultipleObjects()的…
最近正在学习<win32多线程程序设计>,这是其中一段重写消息循环的代码事例,以后可能用的上. while (!quit || gNumPrinting > 0) { // Wait for next message or object being signaled DWORD dwWake; dwWake = MsgWaitForMultipleObjects( gNumPrinting, gPrintJobs, FALSE, INFINITE, QS_ALLEVENTS); if (…