Multithread
文章平均质量分 81
benny5609
普通得不能再普通的80年代后
展开
-
VC中利用多线程技术实现线程之间的通信
当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是必需原创 2008-01-25 11:26:00 · 587 阅读 · 0 评论 -
Windows程序设计(第2版)多线程二
5.是否受信Signaled成员Signaled指示了线程对象是否为“受信”状态。线程在运行期间,Signaled的值永远是FALSE,即“未受信”,只有当线程结束以后,系统才把Signaled的值置为TRUE。此时,针对此对象的等待函数就会返回,如上一小节中的WaitForSingleObject函数。3.1.3 线程的终止当线程正常终止时,会发生下列事件:l 在原创 2008-06-17 13:31:00 · 806 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之综合实例-4
3.3.3核心函数:串口线程控制函数串口线程处理函数是整个类中最核心的部分,它主要完成两类工作:(1)利用WaitCommEvent函数对串口上发生的事件进行获取并根据事件的不同类型进行相应的处理;(2)利用WaitForMultipleObjects函数对串口相关的用户控制事件进行等待并做相应处理。 U原创 2008-06-17 14:11:00 · 1053 阅读 · 0 评论 -
Windows程序设计(第2版)多线程三
3.2 线程同步同步可以保证在一个时间内只有一个线程对某个共享资源有控制权。共享资源包括全局变量、公共数据成员或者句柄等。临界区内核对象和事件内核对象可以很好地用于多线程同步和它们之间的通信。本节将结合各种简单的例子来讨论产生同步问题的根本原因,进而提出相应的解决方案。3.2.1 临界区对象1.为什么要线程同步当多个线程在同一个进程中执行时,可能有不止一个线程同时执行同一段代码,访原创 2008-06-17 13:32:00 · 1089 阅读 · 1 评论 -
深入浅出Win32多线程设计之MFC的多线程(I)
1、创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。 工作者线程 CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函原创 2008-06-17 13:55:00 · 1061 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之综合实例-1
本章我们将以工业控制和嵌入式系统中运用极为广泛的串口通信为例讲述多线程的典型应用。而网络通信也是多线程应用最广泛的领域之一,所以本章的最后一节也将对多线程网络通信进行简短的描述。1.串口通信在工业控制系统中,工控机(一般都基于PC Windows平台)经常需要与单片机通过串口进行通信。因此,操作和使用PC的串口成为大多数单片机、嵌入式系统领域工程师必须具备的能力。串原创 2008-06-17 14:08:00 · 876 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之综合实例-2
2.工程实例下面我们用第1节所述API实现一个多线程的串口通信程序。这个例子工程(工程名为MultiThreadCom)的界面很简单,如下图所示:原创 2008-06-17 14:09:00 · 919 阅读 · 0 评论 -
深入浅出Win32多线程设计之MFC的多线程(II)
使用VC++ 6.0的向导完成一个最简单的单文档架构MFC应用程序MFCThread: (1) 输入MFC EXE工程名MFCThread; (2) 选择单文档架构,不支持Document/View结构; (3) ActiveX、3D container等其他选项都选择无。 我们来分析这个工程。下面是产生的核心源代码: MFCThread.h 文件原创 2008-06-17 13:56:00 · 851 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之基本概念
引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。 理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控制也非常容易。原创 2008-06-17 13:59:00 · 670 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之线程控制
WIN32线程控制主要实现线程的创建、终止、挂起和恢复等操作,这些操作都依赖于WIN32提供的一组API和具体编译器的C运行时库函数。 1.线程函数 在启动一个线程之前,必须为线程编写一个全局的线程函数,这个线程函数接受一个32位的LPVOID作为参数,返回一个UINT,线程函数的结构为: UINT Thre原创 2008-06-17 14:01:00 · 849 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之综合实例-5
3.3.5控制接口应用程序员使用下列一组public函数可以获取串口的DCB及串口上发生的事件: //// Return the device control block//DCB CSerialPort::GetDCB(){return m_dcb;}//// Return the原创 2008-06-17 14:12:00 · 1190 阅读 · 0 评论 -
Windows程序设计(第2版)多线程
应用程序被装载到内存之后就形成了进程,这是上一章重点讨论的话题。但是程序在内存中是如何执行的呢?这就涉及到了代码的执行单元——线程。本章就线程的创建、多线程处理展开介绍。本章首先介绍创建线程的方法和线程内核对象,接着详细分析产生线程同步问题的根本原因,并提出一些解决办法。为了扩展多线程的应用和为读者提供更多的实际机会,本章还重点讨论了线程局部存储和CWinThread类的设计,这也是设计框架程原创 2008-06-17 13:30:00 · 796 阅读 · 0 评论 -
Windows程序设计(第2版)多线程四
2.应用举例下面例子中,主线程通过将事件状态设为“受信”来通知子线程开始工作。这是事件内核对象一个很重要的用途,示例代码如下:#include // 03EventDemo工程下#include #include HANDLE g_hEvent;UINT __stdcall Child原创 2008-06-17 13:33:00 · 889 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之线程通信
简介 线程之间通信的两个基本问题是互斥和同步。 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。 线程互斥是指对于共享的操作系统资源(指的是广义的"资源",而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某一共享原创 2008-06-17 14:05:00 · 769 阅读 · 0 评论 -
Windows程序程序设计---线程同步1
3.2 线程同步同步可以保证在一个时间内只有一个线程对某个共享资源有控制权。共享资源包括全局变量、公共数据成员或者句柄等。临界区内核对象和事件内核对象可以很好地用于多线程同步和它们之间的通信。本节将结合各种简单的例子来讨论产生同步问题的根本原因,进而提出相应的解决方案。3.2.1 临界区对象1.为什么要线程同步当多个线程在同一个进程中执行时,可能有不止一个线程同时执行同一段代码,访原创 2008-03-28 11:18:00 · 869 阅读 · 0 评论 -
Windows程序设计---多线程2
4.退出代码Exit Code成员Exit Code指定了线程的退出代码,也可以说是线程函数的返回值。在线程运行期间,线程函数还没有返回,Exit Code的值是STILL_ACTIVE。线程运行结束后,系统自动将ExitCode设为线程函数的返回值。可以用GetExitCodeThread函数得到线程的退出代码。 …… DWORD dwExitCode原创 2008-03-28 11:16:00 · 1057 阅读 · 0 评论 -
Windows程序设计---多线程1
应用程序被装载到内存之后就形成了进程,这是上一章重点讨论的话题。但是程序在内存中是如何执行的呢?这就涉及到了代码的执行单元——线程。本章就线程的创建、多线程处理展开介绍。本章首先介绍创建线程的方法和线程内核对象,接着详细分析产生线程同步问题的根本原因,并提出一些解决办法。为了扩展多线程的应用和为读者提供更多的实际机会,本章还重点讨论了线程局部存储和CWinThread类的设计,这也是设计框架程原创 2008-03-28 11:15:00 · 1202 阅读 · 0 评论 -
MFC多线程笔记
一.在MFC中创建一个用户界面线程1.从CWinThread派生一个线程类CMyThread重载CMyThread的InitInstance(),ExitInstance()BOOL CMyThread::InitInstance(){ // Do what you want to do PostThreadMessage(WM_QUIT,0,0); return TR原创 2008-01-25 11:52:00 · 1450 阅读 · 0 评论 -
关于CRITICAL_SECTION、CCriticalSection和信号量的问题
CRITICAL_SECTION cs;EnterCriticalSection(&cs);LeaveCriticalSection(&cs);和CCriticalSection cs;cs.Lock();cs.UnLock(); 效果和功能是否相同???谁能给我讲一下信号量的用法,看了例子不太理解原创 2008-01-25 09:48:00 · 3571 阅读 · 1 评论 -
VC++中数据访问互斥的简单实现方法
在多线程存在的情况下,涉及数据读写的操作都要考虑互斥,这里介绍两种简单有效的方法。一、利用全局变量做作互斥对象//define the mutex object.#define MUTEX_NAME _T("Data_Access_Exclusive_Object")static HANDLE g_hMutex = NULL;//Create the mutex object.if(原创 2008-01-25 10:01:00 · 1193 阅读 · 0 评论 -
同步类
http://www.vchome.net/tech/multithread/thread23.htm 1.互斥体对象、信号对象和事件对象也可以用于进程间的线程同步操作。在用Win32函数创建了对象时,我们可以指定对象的名字,还可以设置同步对象在子进程的继承性。创建返回的是HANDLE句柄,我们可以用函数DuplicateHandle来复制对象句柄,这样每个进程都可以拥有同一对象的句柄原创 2008-01-25 10:59:00 · 755 阅读 · 0 评论 -
多线程编程要点
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样原创 2008-01-25 11:33:00 · 627 阅读 · 0 评论 -
WaitForMultipleObjects
WaitForMultipleObjects是Windows中的一个功能非常强大的函数,几乎可以等待Windows中的所有的内核对象(关于该函数的描述和例子见MSDN,)。但同时该函数在用法上却需要一定的技巧。原型:DWORD WaitForMultipleObjects(DWORD nCount,const HANDLE* lpHandles,BOOL bWaitAll,DWORD dwMill原创 2008-02-29 10:50:00 · 1102 阅读 · 1 评论 -
在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
使用多线程时工作线程中调用的API可能会使用到消息循环来完成任务,如果在主线程中使用WaitForSingleObject或WaitForMultipleObjects,,那么程序会crash。解决办法:1、 MSG msg; while (TRUE) { if(WAIT_OBJECT_0 == MsgWaitForMultipleO原创 2008-02-29 15:08:00 · 1657 阅读 · 0 评论 -
多线程访问文件问题中WaitForSingleObject方法的使用,及其效率!
//多线程读取文件,同时把读取到的文件内容再用多线程写入到指定的空白文件中,实现多线程读写文件//从程序中可以看到使用WaitForSingleObject()函数。来控制多线程访问同一文件时不至于发生冲突。通过CEvent g_fileReadEvent, g_fileWriteEvent;这两个变量的ResetEvent()函数和SetEvent()函数来设置信号量的nonsignaled原创 2008-02-29 14:41:00 · 2254 阅读 · 0 评论 -
WaitForSingleObject
WaitForSingleObject的用法DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WA原创 2008-02-29 14:39:00 · 686 阅读 · 0 评论 -
volatile——多线程程序员最好的朋友volatile
泛型:volatile——多线程程序员最好的朋友volatile修正符及让你的编译器为你检查竞态条件(race conditions)Andrei Alexandrescu 我不想破坏你的情绪,但这篇专栏针对多线程编程中最可怕的问题。如果说——正如前面一篇泛型所说的——写出意外安全(exception-safe)的程序很难,但写意外安全的程序和多线程编程比起来就是小孩子的玩意。 用到多线程的程原创 2008-03-26 13:46:00 · 875 阅读 · 0 评论 -
线程同步机制的区别与比较及进程通信方法
线程同步机制的区别与比较及进程通信方法 有关多线程的一些技术问题:1、 何时使用多线程?2、 线程如何同步?3、 线程之间如何通讯?4、 进程之间如何通讯?先来回答第一个问题,线程实际主要应用于四个主要领域,当然各个领域之间不是绝对孤立的,他们有可能是重叠的,但是每个程序应该都可以归于某个领域:1、 offloading time-consuming task。由辅助线程来执行耗原创 2008-03-28 11:21:00 · 883 阅读 · 0 评论 -
C#自动拨号调用类
线程局部存储(thread-local storage, TLS)是一个使用很方便的存储线程局部数据的系统。利用TLS机制可以为进程中所有的线程关联若干个数据,各个线程通过由TLS分配的全局索引来访问与自己关联的数据。这样,每个线程都可以有线程局部的静态存储数据。用于管理TLS的数据结构是很简单的,Windows仅为系统中的每一个进程维护一个位数组,再为该进程中的每一个线程申请一个同样长度的数原创 2008-03-28 11:14:00 · 1619 阅读 · 0 评论 -
Windows程序程序设计---线程同步2
3.2.5 互斥内核对象互斥(Mutex)是一种用途非常广泛的内核对象。能够保证多个线程对同一共享资源的互斥访问。同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。与其他几种内核对象不同,互斥对象在操作系统中拥有原创 2008-03-28 11:19:00 · 768 阅读 · 0 评论 -
深入浅出Win32多线程程序设计之综合实例-3
3.多线程串口类使用多线程串口通信更方便的途径是编写一个多线程的串口类,例如Remon Spekreijse编写了一个CSerialPort串口类。仔细分析这个类的源代码,将十分有助于我们对先前所学多线程及同步知识的理解。3.1类的定义 #ifndef __SERIALPORT_H__#define __SE原创 2008-06-17 14:10:00 · 954 阅读 · 0 评论