Windows线程简介

以下内容摘抄自《Visual C++开发技术大全》,为学习笔记。

线程分为用户界面线程和工作者线程(又称为后台线程或辅助线程)两种。

一、用户界面线程

        用户界面线程通常用来处理用户的输入并响应用户生成的事件和消息;不需要用户输入的就是工作者线程。在MFC中,CWinAPP 对象就是一个用户界面线程,用户界面线程一般都是主线程,在Windows操作系统下随应用程序启动而自动创建,随应用程序的退出而终止。

        创建用户界面线程的方法如下。先从 CWinTread 派生一个类,同时必须用 DECLARE_DYNCREATE IMPLEMENT_DYNCREATE 来声明和实现这个 CWinThread 派生类,然后根据需要重载该派生类的一些成员函数,如: ExitInstanceInitInstanceOnIdlePreTranslateMessage 等函数,最后调用 AfxBeginThread 函数来启动用户界面线程。注意 AfxBeginThread 函数有两个版本,要用到下面版本。

CWinThread* AfxBeginThread( 
   CRuntimeClass* pThreadClass, 
   int nPriority = THREAD_PRIORITY_NORMAL, 
   UINT nStackSize = 0, 
   DWORD dwCreateFlags = 0, 
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL  
);

关于用户界面线程的使用详见以下两篇文章:

MFC用户界面多线程实例1

MFC用户界面多线程实例2

二、工作者线程

        工作者线程用来执行程序的后台处理任务,比如计算、压缩、对文件或串口的读写操作等。它和用户界面线程的区别是它不用CWinThread类派生来创建,它的创建主要通过 AfxBeginThread 函数的另一个版本来实现,原型如下:

CWinThread* AfxBeginThread( 
   AFX_THREADPROC pfnThreadProc, 
   LPVOID pParam, 
   int nPriority = THREAD_PRIORITY_NORMAL, 
   UINT nStackSize = 0, 
   DWORD dwCreateFlags = 0, 
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL  
); 

线程操作

一、创建线程

        创建线程的方法很多,除了 AfxBeginThread 函数外,还有 Win32 API 函数 CreateThread _BeginThreadex

        关于CreateThread 、 _BeginThreadex, 如果线程函数中有用到标准C库函数的话,就要选择 _BeginThreadex 来创建线程。

HANDLE WINAPI CreateThread(
  _In_opt_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_       SIZE_T dwStackSize,
  _In_       LPTHREAD_START_ROUTINE lpStartAddress,
  _In_opt_   LPVOID lpParameter,
  _In_       DWORD dwCreationFlags,
  _Out_opt_  LPDWORD lpThreadId
);

返回值:成功返回线程句柄,失败返回 NULL 。

_BeginThreadex  的参数和 CreateThread 一样。

二、终止线程

        结束线程的方法很多,一般情况下是线程事情做完正常返回,常用的有ExitThread TerminateThread 两个函数。这两个函数终止的线程不同, ExitThread 只能在线程中使用并且只能终止其本身,调用该函数终止线程时可以让操作系统去清除线程使用过的系统资源,但是 new 建立的 C++ 对象资源不能由 ExitThread 来终止;相对于 ExitThread 函数, Terminate 的功能更强大, 它可以用来终止本线程或本线程外的任何线程。下面详细介绍这两个函数。

VOID WINAPI ExitThread(
  _In_  DWORD dwExitCode
);

BOOL WINAPI TerminateThread(
  _Inout_  HANDLE hThread,
  _In_     DWORD dwExitCode
);
成功返回非0,失败返回0。

三、示例。




Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值