每个线程都必须有一个进入点函数,线程从这个进入点开始运行。主线程的进入点函数是main,如果想在线程中创建另一个辅助线程,则必须为该辅助线程创建一个进入点函数,这个函数被称为线程函数。
线程函数的定义如下:
DWORD WINAPI ThreadProc(LPVOID lpParam); //线程函数名称可以是任意的
WINAPI 是一个宏,在windef.h 文件中有声明:
#define WINAPI _stdcall
_stdcall是新标准c/c++函数的调用方法。从底层上说,使用这种调用方法参数的进栈顺序和标准c调用(_cdecl方法)是一样的,都是从左到右。但是,_stdcall采用自动清栈的方式,而_cdecl采用的是手工清栈方式。windows规定,凡是由它来负责调用的函数都必须定义为_stdcall类型。
TreadProc是一个回调函数,即由windows系统来负责调用的函数,所以此类型应定义为_stdcall类型。注意:::如果没有显示说明的话,函数调用方法是_cdecl。
本文介绍了线程函数的基本概念,解释了为什么每个线程都需要一个进入点函数,并详细解析了线程函数的定义及其调用约定。同时,文章还对比了_stdcall与_cdecl两种不同的调用方法。
1506

被折叠的 条评论
为什么被折叠?



