`
agn776rk
  • 浏览: 15498 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

windows线程学习

 
阅读更多

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; } 
分享到:
评论

相关推荐

    windows线程windows

    windows 线程学习,帮助大家学好操作系统中线程的致事内容

    windows线程

    在本示例程序中,我们将深入探讨Windows线程的概念、创建、同步以及管理。 首先,我们需要了解线程的生命周期。线程的生命周期包括创建、就绪、运行、等待、结束等几个阶段。在Windows API中,我们通常使用`...

    windows 多线程处理

    本章主要介绍了六个关键知识点,旨在帮助学习者深入理解并掌握多线程处理。 1. **理解多线程处理概念**:多线程是指在一个进程中同时执行多个独立的执行流,每个流称为一个线程。这使得程序可以在同一时间处理多个...

    windows环境下多线程编程原理

    在Windows环境下进行多线程编程是一项复杂而关键的技术,它涉及到操作系统的核心机制和程序设计的高级概念。...在学习和实践中,不断探索Windows API、C++运行时库和MFC提供的功能,将有助于提升软件开发的专业水平。

    windows多线程编程及例程

    总结来说,《Windows多线程编程及例程》这篇教程是学习Windows环境下多线程开发的宝贵资料,通过理论讲解和实战演练,能够帮助开发者建立起扎实的多线程编程基础,提升软件设计和性能优化的能力。遗憾的是,缺少第四...

    Windows多线程编程技术与实例(C++)(PDF)

    《Windows多线程编程技术与实例(C++)》是一本深入探讨Windows环境下多线程编程的书籍,特别适合正在学习或已经从事C++多线程开发的人员阅读。本书通过丰富的实例,详细讲解了如何在Windows操作系统中利用C++进行...

    多线程学习笔记

    多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...

    windows多线程con.rar_Windows多线程_windows 多线程

    但一般来说,学习和理解Windows多线程编程需要掌握以下关键概念: - 线程上下文切换 - 线程局部存储(TLS) - 线程同步原语:事件、信号量、互斥量、临界区 - 线程安全的数据结构和函数 - 死锁预防和避免 - 资源管理...

    windows API 线程的创建

    通过分析和学习这些代码,你可以更深入地理解Windows API线程创建和管理的具体实践。 总之,理解和掌握Windows API中的线程创建及管理是开发高效、稳定的多线程应用的关键。正确地使用线程能充分利用系统资源,改善...

    多线程学习文档

    ### 多线程学习文档知识点总结 #### 一、线程的基本概念及关系 ##### 进程(Process) - **定义**:进程是Windows系统中的一个基本概念,它包含了运行程序所需的所有资源。 - **特性**: - 相对独立性:一个进程...

    windows多线程编程基础教程

    通过学习这个“Windows多线程编程基础教程”,你可以掌握如何在Windows环境中创建、管理和同步线程,理解线程通信的重要性,并学会避免常见的多线程问题。通过实践例子,你将能够将这些理论知识应用到实际项目中,...

    漫谈兼容内核之二十二 Windows 线程的调度和运行

    本文将深入探讨“漫谈兼容内核之二十二 Windows 线程的调度和运行”这一主题,主要关注Windows线程的创建、调度策略、优先级以及执行过程。 线程是操作系统中的基本执行单元,每个线程都包含一个独立的程序计数器,...

    c#多线程学习代码资料

    总结,本资料“C#多线程学习代码资料”会涵盖这些知识点,并通过示例代码帮助初学者理解多线程的创建、同步、通信以及异常处理等概念,是学习C#多线程编程的良好起点。通过深入学习和实践,开发者能够更好地掌握多...

    windows多线程程序设计源代码

    学习和分析这些源代码,开发者可以了解如何在Windows下创建、管理线程,如何处理线程间的通信和同步,如使用临界区、事件、互斥量、信号量等同步机制,以及如何优化多线程程序以提高效率和避免竞态条件。此外,通过...

    windowsC++多线程加锁信号量共享内存

    在Windows环境下,C++开发中,多线程技术常常被用来提升程序的执行效率,特别是在处理大量并发任务时。然而,多线程编程也带来了一些挑战,如数据竞争和死锁问题,这些问题需要通过同步机制来解决。在这个场景下,...

    Windows多线程编程技术与实例-源代码

    在计算机科学领域,多线程编程是实现并发执行任务的一种技术,特别是在Windows操作系统中,它是一种常见的编程模型。本文将深入探讨Windows环境下的多线程编程技术,包括其原理、创建与管理线程的方法,以及如何通过...

    windows线程管理树_alpha

    `TCWinThread.cpp`可能是自定义的Windows线程类,继承自`CWinThread`,这是MFC(Microsoft Foundation Classes)框架中的一个类,用于支持Windows线程。 `ThreadTreeControl.h`和其它`.h`文件是对应的头文件,包含...

    windows 多线程

    以上知识点涵盖了Windows多线程编程的基本原理和实践,通过学习和实践这些内容,开发者能够创建高效、稳定的多线程应用程序。提供的压缩包文件很可能包含这些主题的详细讲解和实例代码,对于深入理解Windows多线程...

Global site tag (gtag.js) - Google Analytics