多线程执行函数的小问题
自己定义一个类 类中的某个函数A中有这么一句代码:
HANDLE hMainThread = CreateThread(NULL, 0, MainThreadProc, (LPVOID)this, CREATE_SUSPENDED, &dwThreadID);
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
第二个参数msdn这么解释的:Pointer to a variable to be passed to the thread
这是什么意思呢?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
第三个参数为线程执行函数B(也是定义在该类中)
然后 B的定义如下:
DWORD WINAPI CRapidFinder::MainThreadProc(LPVOID lpParam)//主线程执行函数
{
CRapidFinder* pThis = (CRapidFinder*)lpParam;
............
}
请问B为什么这么定义呢?前面的WINAPI什么意思呢?还有B中的第一行代码什么意思呢?lpParam传递的是类的指针?
求指教!
[解决办法]
CRapidFinder* pThis = (CRapidFinder*)lpParam;
//传过来地址,然后强转成类指针,方便后面对于CRapidFinder类的一些成员调用!
[解决办法]
必须的!不然会访问出错的!
在你使用 pThis这个指针的过程中,lpParam必须一直是有效的!
因为是同一块内存空间!
[解决办法]
1、第二个参数是线程堆栈的大小,你说错了."Pointer to a variable to be passed to the thread"是对第四个参数的描述,是一个你要传递给线程的参数的地址指针。
2、#define WINAPI__stdcall 所以WINAPI就是一个调用方式
3、线程函数的定义形式是约定好的,没有为什么,API定义就是那样
4、线程函数的唯一参数也就是你创建函数的传入的参数,你悟了,就是第四个参数,您看,它实际就是一个对象。
[解决办法]
CreateThread函数的参数
第一个:指向SECURITY_ATTRIBUTES结构的指针,是有关安全属性的,用默认安全属性只要传NULL
第二个:指定线程栈的大小,0使用默认线程粘默认的大小,一般是1MB
第三个:线程的入口函数地址
第四个:传递给线程的参数
第五个:控制参数,要么是0,表示线程创建就可调度执行,要么是CREATE_SUSPENDED,表明线程创建后暂停。
第六个:存储线程的ID的DWORD变量地址,可以传NULL,表示对线程的ID没兴趣。