为什么在新线程中访问当前对象时会创建新的对话框对象?

时间:2013-12-25 07:11:30

标签: c++ multithreading visual-c++ object mfc

在基于对话框的程序中,我有另一个线程,用于重复调用主对话框中的函数。在创建线程之后,一切正常,直到第一次调用主对话框的函数(thisclass->GetData();),程序流突然返回到构造函数。我不知道为什么,因为这里没有new声明。

UINT __cdecl RunCPRead(LPVOID pParam)
{
    CMyDlg *thisclass = (CMyDlg *)pParam;
    while (thisclass->m_Start)
    {   
        thisclass->GetData(); // jumps to constructor on first call
    }
    return 0;
}

// default contructor, back here after first `thisclass->GetData();` call
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMyDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

CMyDlg::OnBnClickedStart()
{
    Init();
    AfxBeginThread(&RunCPRead, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
}

CMyDlg::GetData()
{
    char buff[8];
    int result = getDataBuffer(buff);    // call function in dll
    // do something with the data
}

我认为不允许从不同的线程访问对象方法,因此我将GetData()及其相关的函数/变量更改为全局的,然后出现另一个问题。这些变量在程序启动时初始化但在创建新线程后,当从新线程访问并使我的程序行为变得奇怪时,它们的值变为“随机”

我的计划有什么问题,如何解决?

0 个答案:

没有答案