MFC 多线程问题
我用VS2005创建了一个对话框应用程序,对话框上放了两个按钮(IDC_BUTTON_START和IDC_BUTTON_STOP)和一个编辑框(IDC_EDIT_TIME)。目的是点击开始按钮后,开启一个线程,在线程函数中,将当前时间显示在编辑框内,但在编译过程中VS2005总提示编译出错:error C2440: “类型转换”: 无法从“overloaded-function”转换为“LPTHREAD_START_ROUTINE”,这个错误就是在CreateThread函数这块,不清楚是为什么,请各位大神帮忙看看头文件定义:
// CMultiThreadDlg 对话框
class CMultiThreadDlg : public CDialog
{
// 构造
public:
CMultiThreadDlg(CWnd* pParent = NULL); // 标准构造函数
void ThreadFunc();
volatile bool m_bRun;//表征线程是否正在运行
HANDLE hThread;//线程句柄
DWORD ThreadID;//线程ID
// 对话框数据
enum { IDD = IDD_MULTITHREAD_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButtonStart();
public:
afx_msg void OnBnClickedButtonStop();
};
源文件:
void CMultiThreadDlg::OnBnClickedButtonStart()
{
// TODO: 在此添加控件通知处理程序代码
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
NULL,
0,
&ThreadID);
GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
}
void CMultiThreadDlg::OnBnClickedButtonStop()
{
// TODO: 在此添加控件通知处理程序代码
m_bRun=FALSE;
GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);
}
void CMultiThreadDlg::ThreadFunc()
{
CTime time;
CString strTime;
m_bRun=TRUE;
while(m_bRun)
{
time=CTime::GetCurrentTime();
strTime=time.Format("%H:%M:%S");
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT_TIME,strTime);
Sleep(1000);
}
}