Win32 多线程程序设计有关的函数说明

Win32 多线程程序设计有关的函数说明

一、官方文档中有关__beginthread的说明:_beginthread、_beginthreadex | Microsoft Learn

1._beginthread和_endthread

_beginthread:

作用:创建线程

_endthread:

作用:退出线程

2._beginthreadex和_endthreadex:

_beginthreadex:

_beginthread 相比,_beginthreadex 更类似于 Win32 CreateThread API。 _beginthreadex_beginthread 的差别体现在以下方面:

  • _beginthreadex 还有三个参数:initflagSecuritythreadaddr。 新线程可通过指定的 security 创建为挂起状态,并且可使用线程标识符 *thrdaddr*进行访问。

  • start_address 处传递给 _beginthreadex 的例程必须使用 __stdcall (对于本机代码)或 __clrcall (对于托管代码)调用约定,并且必须返回线程退出代码。

  • 如果失败,_beginthreadex 会返回 0,而不是 -1L。

  • 使用 _beginthreadex 创建的线程已通过对 _endthreadex 的调用终止。

可以显式调用 _endthread_endthreadex 终止线程;但是,当线程从作为参数传递的例程中返回时,会自动调用 _endthread_endthreadex。 通过对 _endthread_endthreadex 的调用来终止线程有助于确保正确恢复为线程分配的资源。

_endthread 会自动关闭线程句柄,而 _endthreadex 则不会。 因此,当你使用 _beginthread_endthread 时,不要通过调用 Win32 CloseHandle API 来显式关闭线程句柄。 该行为与 Win32 ExitThread API 不同。

二、AfxBeginThread:MFC框架中创建线程。官方文档中有关AfxBeginThread的说明:AfxBeginThread | Microsoft Learn

四、CloseHandle:关闭句柄。

五、CoInitializeEx:初始化 COM 库供调用线程使用,设置线程的并发模型,并根据需要为线程创建一个新单元。官方文档有关CoInitialzeEx函数的说明:CoInitializeEx 函数 (combaseapi.h) - Win32 apps | Microsoft Learn

六、CreateEvent:创建事件对象并且返回对象句柄。内核对象 - Win32 apps | Microsoft Learn

七、CreateFile:创建或者打开文件或IO设备。最常见的IO设备文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和管道。createFileA 函数 (fileapi.h) - Win32 apps | Microsoft Learn

八、CreateFileMapping:为指定文件创建或打开命名或未命名的文件映射对象。CreateFileMappingA 函数 (winbase.h) - Win32 apps | Microsoft Learn

九、CreateIOCompletePort:创建一个输入/输出 (I/O) 完成端口,并将其与指定的文件句柄相关联,或创建尚未与文件句柄关联的 I/O 完成端口,允许稍后关联。CreateIoCompletionPort function (IoAPI.h) - Win32 apps | Microsoft Learn

十、CreateMutex:创建或打开命名的或未命名的互斥体对象。createMutexA 函数 (synchapi.h) - Win32 apps | Microsoft Learn

十一、CreateSemaphore:创建或打开一个命名或未命名的信号量对象。CreateSemaphoreW 函数 (synchapi.h) - Win32 apps | Microsoft Learn

十二、CreateThread:创建在调用进程的虚拟地址空间内执行的线程。CreateThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

十三、DeleteCriticalSection:释放临界区对象使用的所有资源。deleteCriticalSection 函数 (synchapi.h) - Win32 apps | Microsoft Learn

十四、DisableThreadLibraryCalls:禁用指定动态链接库 (DLL) 的DLL_THREAD_ATTACH和DLL_THREAD_DETACH通知。 这可以减少某些应用程序的工作集的大小。DisableThreadLibraryCalls 函数 (libloaderapi.h) - Win32 apps | Microsoft Learn

十五、DllMain:动态链接库 (DLL) 的可选入口点。DllMain 入口点 (Process.h) - Win32 apps | Microsoft Learn

十六、EnterCriticalSection:等待指定关键部分对象的所有权。 此函数将在授予调用线程所有权时返回。EnterCriticalSection 函数 (synchapi.h) - Win32 apps | Microsoft Learn

十七、ExitThread:结束调用线程。exitThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

十八、FileIOCompletionRoutine:与 ReadFileExWriteFileEx 函数一起使用的应用程序定义的回调函数。 当异步输入和输出 (I/O) 操作完成或取消且调用线程处于可警报状态时,将调用它。LPOVERLAPPED_COMPLETION_ROUTINE (minwinbase.h) - Win32 apps | Microsoft Learn

十九、GetExitCodeThread:检索指定线程的终止状态。getExitCodeThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

二十、GetQueuedCompletionStatus:尝试从指定的 I/O 完成端口取消对 I/O 完成数据包的排队。 如果没有完成数据包排队,函数将等待与完成端口关联的挂起 I/O 操作完成。GetQueuedCompletionStatus 函数 (ioapiset.h) - Win32 apps | Microsoft Learn

二十一、GetStdHandle:检索指定标准设备的句柄(标准输入、标准输出或标准错误)。GetStdHandle 函数 - Windows Console | Microsoft Learn

二十二、GetThreadPriority:检索指定线程的优先级值。 此值与线程进程的优先级类一起确定线程的基本优先级级别。getThreadPriority 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

二十三、InitializeCriticalSection:初始化临界区对象。InitializeCriticalSection 函数 (synchapi.h) - Win32 apps | Microsoft Learn

二十四、InterlockedDecrement:递减 () 指定 32 位变量的值作为原子操作减少一个。interlockedDecrement 函数 (winnt.h) - Win32 apps | Microsoft Learn

二十五、InterlockedExchange:将 32 位变量设置为指定值作为原子操作。interlockedExchange 函数 (winnt.h) - Win32 apps | Microsoft Learn

二十六、InterlockedIncrement:指定 32 位变量的值作为原子运算增加一个增量。InterlockedIncrement 函数 (winnt.h) - Win32 apps | Microsoft Learn

二十七、LeaveCriticalSection:释放指定临界区对象的所有权。LeaveCriticalSection 函数 (synchapi.h) - Win32 apps | Microsoft Learn

二十八、MapViewOfFile:将文件映射的视图映射到调用进程的地址空间中。MapViewOfFile 函数 (memoryapi.h) - Win32 apps | Microsoft Learn

二十九、MsgWaitForMultipleObjects:等待,直到一个或所有指定对象处于信号状态或超时间隔已过。 对象可以包含输入事件对象,使用 dwWakeMask 参数指定这些对象。MsgWaitForMultipleObjects 函数 (winuser.h) - Win32 apps | Microsoft Learn

三十、OpenFileMapping:打开命名文件映射对象。OpenFileMappingA 函数 (winbase.h) - Win32 apps | Microsoft Learn

三十一、PostThreadMessage:将消息发布到指定线程的消息队列。 它会返回 ,而无需等待线程处理消息。postThreadMessageA 函数 (winuser.h) - Win32 apps | Microsoft Learn

三十二、ReadFile:以同步方式从文件或设备读取数据从指定的文件或输入/输出 (I/O) 设备读取数据。 读取发生在文件指针指定的位置(如果设备支持)ReadFile 函数 (fileapi.h) - Win32 apps | Microsoft Learn

三十三、ReadFileEx:从指定的文件或输入/输出 (I/O) 设备读取数据。 它以异步方式报告其完成状态,并在读取已完成或取消并且调用线程处于可警报等待状态时调用指定的完成例程。ReadFileEx 函数 (fileapi.h) - Win32 apps | Microsoft Learn

三十四、ReleaseMutex:释放指定互斥对象的所有权。releaseMutex 函数 (synchapi.h) - Win32 apps | Microsoft Learn

三十五、ReleaseSemaphore:将指定信号灯对象的计数增加指定的量.ReleaseSemaphore 函数 (synchapi.h) - Win32 apps | Microsoft Learn

三十六、ReplyMessage:答复 SendMessage 函数从另一个线程发送的消息。replyMessage 函数 (winuser.h) - Win32 apps | Microsoft Learn

三十七、ResumeThread:递减线程的挂起计数。 当暂停计数减为零时,将恢复线程的执行。

ResumeThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

三十八、SetThreadPriority:设置指定线程的优先级值。 此值与线程进程的优先级类一起确定线程的基本优先级级别。setThreadPriority 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

三十九、SleepEx:挂起当前线程,直到满足指定的条件。 sleepEx 函数 (synchapi.h) - Win32 apps | Microsoft Learn

四十、SuspendThread:挂起指定的线程。SuspendThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

四十一、TerminateThread:终止线程。TerminateThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

四十二、TlsAlloc:分配线程本地存储 (TLS) 索引。 进程的任何线程随后都可以使用此索引来存储和检索线程本地的值,因为每个线程都会收到自己的索引槽。tlsAlloc 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

四十三、TlsFree:释放线程本地存储 (TLS) 索引,使其可供重复使用。tlsFree 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

四十四、TlsGetValue:检索调用线程的线程本地存储 (指定 TLS 索引的 TLS) 槽中的值。 进程中的每个线程都具有自己的针对每个 TLS 索引的槽。tlsGetValue 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

四十五、TlsSetValue:将值存储在调用线程的线程本地存储 (指定 TLS 索引的 TLS) 槽中。 进程中的每个线程都具有自己的针对每个 TLS 索引的槽。tlsSetValue 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learn

四十六、UnMapViewOfFile:从调用进程的地址空间中取消映射文件的映射视图。UnmapViewOfFile 函数 (memoryapi.h) - Win32 apps | Microsoft Learn

四十七、GetOverlappedResult:检索指定文件、命名管道或通信设备上重叠操作的结果。 若要指定超时间隔或等待可警报线程,请使用 GetOverlappedResultExGetOverlappedResult 函数 (ioapiset.h) - Win32 apps | Microsoft Learn

四十八、WaitForMultiObjects:等待,直到一个或所有指定对象处于信号状态或超时间隔已过。若要进入可警报等待状态,请使用 WaitForMultipleObjectsEx 函数。WaitForMultipleObjects 函数 (synchapi.h) - Win32 apps | Microsoft Learn

四十九、WaitForMultiObjectsEx:等待一个或所有指定的对象处于信号状态、I/O 完成例程或异步过程调用 (APC) 排队到线程,或超时间隔已过。WaitForMultipleObjectsEx 函数 (synchapi.h) - Win32 apps | Microsoft Learn

五十、WaitForSingleObject:等待指定的对象处于信号状态或超时间隔已过。

若要进入可发出警报的等待状态,请使用 WaitForSingleObjectEx 函数。

waitForSingleObject 函数 (synchapi.h) - Win32 apps | Microsoft Learn

五十一、WaitForSingleObjectEx:等待指定的对象处于信号状态、I/O 完成例程或异步过程调用 (APC) 排队到线程,或超时间隔已过。WaitForSingleObjectEx 函数 (synchapi.h) - Win32 apps | Microsoft Learn

五十二、WriteFile:将数据写入指定的文件或输入/输出 (I/O) 设备。WriteFile 函数 (fileapi.h) - Win32 apps | Microsoft Learn

五十三、WriteFileEx:将数据写入指定的文件或输入/输出 (I/O) 设备。 它以异步方式报告其完成状态,并在写入已完成或取消并且调用线程处于可警报等待状态时调用指定的完成例程。WriteFileEx 函数 (fileapi.h) - Win32 apps | Microsoft Learn

关于Win32中有关多线程的函数小结就到这里了。这里是所有的函数都是来自《Win32多线程程序设计》这本书中。如果需要具体的细节可以参考这本书。也可以去官方网站查看具体的用法。

欢迎大家一起交流学习。

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值