佚名通过本文主要向大家介绍了静态线程,静态成员变量,静态成员变量初始化,java静态成员变量,类的静态成员变量等相关知识,希望对您有所帮助,也希望大家支持微课江湖 www.weikejianghu.com
问题:静态的线程为什么不能访问类的成员变量??????有代码
描述:
如题
void CMD5_Dlg2Dlg::OnButton1()
{
CString	m_strFilePath;
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, "All Files(*.*)|*.*||", this);
if(dlg.DoModal() == IDOK)
{
m_strFilePath = dlg.GetPathName();	//保存发送文件的路径
}
MD5 md5;
CString	outHash ;
md5.CreateToThread(m_strFilePath);
md5.GetThreadHashFile();
GetDlgItem(IDC_EDIT1)->SetWindowText(outHash);
}
void MD5::CreateToThread(CString strFilePath)
{
DWORD id;
m_FilePath=strFilePath;
Path=strFilePath;
AfxMessageBox(Path);
HANDLE h = CreateThread(NULL, 0, ThreadHashFile, this, 0, &id);
CloseHandle(h);
}
DWORD WINAPI MD5::ThreadHashFile(LPVOID lpParam)
{
AfxMessageBox(" ThreadHashFile ");
CString tempHash = "";
MD5 * pMD5 = (MD5 *)lpParam;
// MD5 object to work with
MD5_CTX m_md5;
CString	outHash;
AfxMessageBox(pMD5->Path); // 这里的Path值和CreateToThread()函数不同
if ( pMD5->Path.IsEmpty() )// 程序运行到这里就报错
return 0;
}
解决方案1:
线程的同步没做好,反正要等计算完后再显示到界面上,就不要新建一个线程了
解决方案2:
MD5 md5;//md5在此是个局部变量,到线程真正执行起来时,它的生命周期已经结束了
CString	outHash ;
md5.CreateToThread(m_strFilePath);
md5.GetThreadHashFile();