//创建线程函数CreateThread()原型
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
);
//其中线程函数的原型,也就是LPTHREAD_START_ROUTINE如下
DWORD WINAPI ThreadProc(\_In\_ LPVOID lpParameter);
今天在写一个MFC程序的时候,想将某个类成员函数作为线程函数创建线程,所以将该成员函数按照上面的形式进行声明和定义,编译的时候出现了“函数不接受2个参数”的错误,才意思到非静态类成员函数中的隐藏this指针。
那么解决方法如下:
1. 用外部函数作为线程函数,如果需要操作类里面的私有成员,也可以用友元函数作为线程函数。
2. 用静态成员函数作为线程函数,但这样线程岂不是只能访问静态成员变量和静态成员函数?那我们可以把对象指针作为线程函数的函数传递过去,实现对非静态成员函数和非静态成员变量的访问。
解决完“函数不接受2个参数”的问题后,成功创建了线程,对于创建的这个线程在这里就称之为“非主线程”。
在非主线程中,我有一些新数据希望在MFC的界面中更新显示,那么我就通过AfxGetApp()->GetMainWnd()
依次获取当前程序的CWinApp*指