//定义一个结构体,以便传递给线程
struct FileInfo
{
DWORD filesize;
long received;
};
FileInfo m_FileInfo; //声明一个对象
AfxBeginThread(UpdateProgressThread,(LPVOID)&m_FileInfo,THREAD_PRIORITY_HIGHEST); //UpdateProgressThread为线程函数
//注意要传递一个结构体进来,参数必须只能是一个,且是LPVOID类型,也就是接收任何类型的参数
UINT CShanLingDlg::UpdateProgressThread(LPVOID lParam)
{
FileInfo* tis = (FileInfo*)lParam;
......
}
//在类的头文件中注意把线程函数设置为静态的,因为AfxBeginThread只接受普通函数,而不接收类的成员函数,定义为静态的,不需要定义实例化对象就可以直接调用。(C++11中的线程类就不限制这一点。)
static UINT UpdateProgressThread(LPVOID lParam);
如果要是静态函数里使用
::PostMessage(this->m_hWnd,WM_USER_THREAD_SVRDOWN_UPDATE_PROGRESS, (WPARAM)filesize, (LPARAM)temp1);的话则会报错,在静态函数里头不能使用this指针。
我们可以定义一个全局的句柄
HWND hwnd;
在类的OnInitDialog() 函数里添加
hwnd=this->m_hWnd;
此时再引用即可。
::PostMessage(hwnd,WM_USER_THREAD_SVRDOWN_UPDATE_PROGRESS, (WPARAM)filesize, (LPARAM)temp1);
转载于:https://blog.51cto.com/dreamylights/1325696