windows线程学习
2010年09月01日
线程(thread):是为了提高系统内程序的并发执行程度而提出来的概念,它是比进程更小的能够独立运行的基本单位。线程是一个轻量级实体(light-weight entity),它的结构(thread structure)相对简单,在切换速度上非常得快,同一进程中的线程切换不会引起进程的切换,对于并行计算来讲,有效的利用线程能够改善计算的效率,简化计算的复杂性。
同一进程中的线程共享如下内容:
全局变量
堆数据
打开的文件句柄
用户及用户组ID
但每个线程具有独立的:
线程ID
堆栈
error变量
优先级
创建线程的方法与区别(针对C/C++/MFC)
1、CreateThread( ) --WIN32 API函数
2、_beginthreadex( ) --MS对C Runtime库的扩展SDK函数
3、AfxBeginThread( ) --MFC中线程创建的MFC函数
线程终止运行
若要终止线程的运行,可以使用下面的方法:
1、线程函数返回(最好使用这种方法)。
2、通过调用ExitThread/_endthreadex /AfxEndThread函数,线程将自行撤消(最好不要使用这种方法)。
3、同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)。
4、包含线程的进程终止运行(应该避免使用这种方法)。
一个线程类的示例: #pragma once class CThread { public: CThread(void); ~CThread(void); public: virtual BOOL Start(); //启动线程 virtual BOOL Stop(); //停止线程 virtual void Run(); //运行函数,线程反复调用 void EnableSleep(BOOL bEanble); //是否允许线程sleep virtual void OnThreadMsg(UINT message, WPARAM wParam, LPARAM lParam); //接收到消息 virtual void OnThreadStart(); //当线程启动时,调用一次 virtual void OnQuit(); //当线程结束时,调用一次 BOOL PostThreadMsg(UINT message, WPARAM wParam, LPARAM lParam); //向线程发送消息 BOOL IsStart(); //是否启动 private: CWinThread *m_pThread; static UINT ThreadProc(PVOID param); int m_nSleepTime; };
////////////////////////////////////////////////// /////////////////////////////////////////////////// /////////// #include "StdAfx.h" #include "Thread.h" CThread::CThread(void) { m_nSleepTime = 1; m_pThread = NULL; } CThread::~CThread(void) { } BOOL CThread::IsStart() { return m_pThread != NULL; } BOOL CThread::Start() { m_pThread = AfxBeginThread(ThreadProc,this); return m_pThread != NULL; } BOOL CThread::PostThreadMsg(UINT message, WPARAM wParam, LPARAM lParam) { if( m_pThread ) { return m_pThread->PostThreadMessageW(message, wParam, lParam); } return FALSE; } BOOL CThread::Stop() { if( m_pThread ) { return m_pThread->PostThreadMessage(WM_QUIT,0,0); } return FALSE; } void CThread::OnThreadStart() { } void CThread::OnQuit() { m_pThread=NULL; } void CThread::OnThreadMsg(UINT message, WPARAM wParam, LPARAM lParam) { } void CThread::EnableSleep(BOOL bEanble) { if (bEanble) { m_nSleepTime = 1; } else { m_nSleepTime = 0; } } void CThread::Run() { } UINT CThread::ThreadProc(PVOID param) { CThread *pThread = (CThread*)param; pThread->OnThreadStart(); MSG msg; while(1) { while( PeekMessage(&msg,NULL,0,0,PM_REMOVE) ) { switch(msg.message) { case WM_QUIT: { pThread->OnQuit(); return 0; } default: { pThread->OnThreadMsg(msg.message,msg.wParam,msg.lPa ram); } continue; } } pThread->Run(); if( pThread->m_nSleepTime > 0 ) { Sleep(pThread->m_nSleepTime); } pThread->m_nSleepTime = 1; } return 0; }
发表评论
-
Programming Applications for Microsoft Windows - 第七部分 附录
2012-01-20 02:07 722Programming Applications for Mi ... -
WINCE及MOBILE常用代码(转)
2012-01-20 02:07 559WINCE及MOBILE常用代码(转) 2010年06月05 ... -
一个对Winsock完成端口模型封装的类
2012-01-20 02:07 547一个对Winsock完成端口模型封装的类 2011年01月0 ... -
MFC架构之CWinThread类
2012-01-20 02:07 725MFC架构之CWinThread类 2010 ... -
赞美女人的词语
2012-01-19 09:58 1375赞美女人的词语 2011年1 ... -
赞美女性的词语大全
2012-01-19 09:58 1073赞美女性的词语大全 2010年07月18日 温柔、体贴 ... -
魅力口才之--精彩赞美词语汇编
2012-01-19 09:58 914魅力口才之--精彩赞美 ... -
Win7系统服务优化攻略
2012-01-19 09:57 995Win7系统服务优化攻略 2011年01月29日 Win ... -
Win7特别功能:优化篇
2012-01-19 09:57 758Win7特别功能:优化篇 201 ... -
c#获取路径 c/s
2012-01-17 02:30 777c#获取路径 c/s 2011年09月09日 一、获取当 ... -
解决无IISXP系统无IIS如何安装IIS【出现问题请看最后面】
2012-01-17 02:30 596解决无IISXP系统无IIS如何安装IIS【出现问题请看最后面 ... -
总体上说,是c++ builder胜于VC++,DELPHI是最好
2012-01-17 02:30 771总体上说,是c++ builder胜 ... -
定制微软的打印机驱动程序(二)
2012-01-17 02:30 1165定制微软的打印机驱动程序(二) 2010年11月10日 ... -
倦了````
2012-01-15 22:14 579倦了```` 2009年06月14日 ... -
.net winform 控件缩写
2012-01-15 22:13 819.net winform 控件缩写 2009年10月08日 ... -
UI-UE测试要点详解(转)
2012-01-15 22:13 1368UI-UE测试要点详解(转) 2 ... -
CListCtrl控件功能扩展
2012-01-15 22:13 1207CListCtrl控件功能扩展 2010年05月19日 ...
相关推荐
windows 线程学习,帮助大家学好操作系统中线程的致事内容
在本示例程序中,我们将深入探讨Windows线程的概念、创建、同步以及管理。 首先,我们需要了解线程的生命周期。线程的生命周期包括创建、就绪、运行、等待、结束等几个阶段。在Windows API中,我们通常使用`...
本章主要介绍了六个关键知识点,旨在帮助学习者深入理解并掌握多线程处理。 1. **理解多线程处理概念**:多线程是指在一个进程中同时执行多个独立的执行流,每个流称为一个线程。这使得程序可以在同一时间处理多个...
在Windows环境下进行多线程编程是一项复杂而关键的技术,它涉及到操作系统的核心机制和程序设计的高级概念。...在学习和实践中,不断探索Windows API、C++运行时库和MFC提供的功能,将有助于提升软件开发的专业水平。
总结来说,《Windows多线程编程及例程》这篇教程是学习Windows环境下多线程开发的宝贵资料,通过理论讲解和实战演练,能够帮助开发者建立起扎实的多线程编程基础,提升软件设计和性能优化的能力。遗憾的是,缺少第四...
《Windows多线程编程技术与实例(C++)》是一本深入探讨Windows环境下多线程编程的书籍,特别适合正在学习或已经从事C++多线程开发的人员阅读。本书通过丰富的实例,详细讲解了如何在Windows操作系统中利用C++进行...
多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...
但一般来说,学习和理解Windows多线程编程需要掌握以下关键概念: - 线程上下文切换 - 线程局部存储(TLS) - 线程同步原语:事件、信号量、互斥量、临界区 - 线程安全的数据结构和函数 - 死锁预防和避免 - 资源管理...
通过分析和学习这些代码,你可以更深入地理解Windows API线程创建和管理的具体实践。 总之,理解和掌握Windows API中的线程创建及管理是开发高效、稳定的多线程应用的关键。正确地使用线程能充分利用系统资源,改善...
### 多线程学习文档知识点总结 #### 一、线程的基本概念及关系 ##### 进程(Process) - **定义**:进程是Windows系统中的一个基本概念,它包含了运行程序所需的所有资源。 - **特性**: - 相对独立性:一个进程...
通过学习这个“Windows多线程编程基础教程”,你可以掌握如何在Windows环境中创建、管理和同步线程,理解线程通信的重要性,并学会避免常见的多线程问题。通过实践例子,你将能够将这些理论知识应用到实际项目中,...
本文将深入探讨“漫谈兼容内核之二十二 Windows 线程的调度和运行”这一主题,主要关注Windows线程的创建、调度策略、优先级以及执行过程。 线程是操作系统中的基本执行单元,每个线程都包含一个独立的程序计数器,...
总结,本资料“C#多线程学习代码资料”会涵盖这些知识点,并通过示例代码帮助初学者理解多线程的创建、同步、通信以及异常处理等概念,是学习C#多线程编程的良好起点。通过深入学习和实践,开发者能够更好地掌握多...
学习和分析这些源代码,开发者可以了解如何在Windows下创建、管理线程,如何处理线程间的通信和同步,如使用临界区、事件、互斥量、信号量等同步机制,以及如何优化多线程程序以提高效率和避免竞态条件。此外,通过...
在Windows环境下,C++开发中,多线程技术常常被用来提升程序的执行效率,特别是在处理大量并发任务时。然而,多线程编程也带来了一些挑战,如数据竞争和死锁问题,这些问题需要通过同步机制来解决。在这个场景下,...
在计算机科学领域,多线程编程是实现并发执行任务的一种技术,特别是在Windows操作系统中,它是一种常见的编程模型。本文将深入探讨Windows环境下的多线程编程技术,包括其原理、创建与管理线程的方法,以及如何通过...
`TCWinThread.cpp`可能是自定义的Windows线程类,继承自`CWinThread`,这是MFC(Microsoft Foundation Classes)框架中的一个类,用于支持Windows线程。 `ThreadTreeControl.h`和其它`.h`文件是对应的头文件,包含...
以上知识点涵盖了Windows多线程编程的基本原理和实践,通过学习和实践这些内容,开发者能够创建高效、稳定的多线程应用程序。提供的压缩包文件很可能包含这些主题的详细讲解和实例代码,对于深入理解Windows多线程...