| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1153 人关注过本帖
标题:MFC 多线程问题
只看楼主 加入收藏
limj1987
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-2-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
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);
    }
}
搜索更多相关主题的帖子: 应用程序 public 多线程 对话框 
2014-02-26 07:46
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6810
专家分:42393
注 册:2010-12-16
收藏
得分:20 
你看一下  LPTHREAD_START_ROUTINE 的原型,它不是void类型的

typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (
    [in] LPVOID lpThreadParameter
);

参考:http://msdn.(v=vs.110).aspx

所以你的线程函数应该定义成这样
static DWORD WINAPI ThreadFunc();

对应的函数体也要做相应的修改。

你定义的函数类型不对,原型应该是一个DWORD的函数,调用方式应该是stdcall,同时函数应该属于类模版而不是对象,所以它就应该是静态的了

我行我乐
我的博客:
http://blog.yuccn. net
2014-03-02 12:27
快速回复:MFC 多线程问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060868 second(s), 7 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved