关于一个MFC中创建线程的问题解决!!!
我现在又一个MFC程序,单文档的。视图分割了两个窗口,右边是一个显示窗口,类名称叫CCrystalView,然后我在这个类中添加了一个创建线程的按钮。线程函数是静态的。然...
我现在又一个MFC程序,单文档的。视图分割了两个窗口,右边是一个显示窗口,类名称叫CCrystalView,然后我在这个类中添加了一个创建线程的按钮。线程函数是静态的。然而我需要在处理过程中调用该类的成员函数。所以需要把该类的指针对象传进去。请问怎么传啊。我试用这个强制转换方法。
void CCrystalView::ExtDown(LPVOID lpParam)
{
CCrystalView *pCrystalView=(CCrystalView *)lpParam;
pCrystalView->ColorTestingResult();//该函数是一个成员函数。
}
虽然可以调用。但是成员函数里面我用GetDlgItem函数获得某个空间指针时候,程序就崩了。
请高手帮帮忙!!!
我还用了一个结构体类来传递其他类的指针。功能都可以实现,可是就对于本类CCrystalView去调用成员函数时,调用GetDlgItem一些函数时就程序崩了。
struct TDownParam
{
CConnectDB *m_pconnect;
CCrystalSet *m_pCrystalSet;
CSerialComm *m_pSerialComm;
CCrystalResult *m_pCrystalResult;
//CCrystalView *m_pCrystalView;
};
是不是在窗口初始化时就应该把该窗口句柄给传进去?应该怎样做呢。线程是在这个类里面创建的 展开
void CCrystalView::ExtDown(LPVOID lpParam)
{
CCrystalView *pCrystalView=(CCrystalView *)lpParam;
pCrystalView->ColorTestingResult();//该函数是一个成员函数。
}
虽然可以调用。但是成员函数里面我用GetDlgItem函数获得某个空间指针时候,程序就崩了。
请高手帮帮忙!!!
我还用了一个结构体类来传递其他类的指针。功能都可以实现,可是就对于本类CCrystalView去调用成员函数时,调用GetDlgItem一些函数时就程序崩了。
struct TDownParam
{
CConnectDB *m_pconnect;
CCrystalSet *m_pCrystalSet;
CSerialComm *m_pSerialComm;
CCrystalResult *m_pCrystalResult;
//CCrystalView *m_pCrystalView;
};
是不是在窗口初始化时就应该把该窗口句柄给传进去?应该怎样做呢。线程是在这个类里面创建的 展开
3个回答
2012-11-09 · 知道合伙人软件行家
关注
展开全部
在本类中使用 GetDlgItem 是没有问题的,但是只限于 你当前使用 GetDlgItem 成员函数内部,不能另一个指针传递到多线程内。因为GetDlgItem 得到的是临时的。
在多线程里 可以如下:
CCrystalView *pCrystalView=(CCrystalView *)lpParam;
pCrystalView->GetDlgItem(控件号)->操作;
CWnd::GetDlgItem
CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
返回值:
指向给定的控件或子窗口的指针。如果没有控件具有nID给出的整数ID,则返回NULL。
返回的指针可能是临时的,不能被保存以供将来使用。
在多线程里 可以如下:
CCrystalView *pCrystalView=(CCrystalView *)lpParam;
pCrystalView->GetDlgItem(控件号)->操作;
CWnd::GetDlgItem
CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
返回值:
指向给定的控件或子窗口的指针。如果没有控件具有nID给出的整数ID,则返回NULL。
返回的指针可能是临时的,不能被保存以供将来使用。
追问
还有我想问的是,我有一个成员函数TestResult();在线程里用。如
{//线程里面
CCrystalView *pCrystalView=(CCrystalView *)lpParam;
pCrystalView->TestResult();//成员函数
}
运行线程以后,这个函数有时候就没调用,如果停线程再开始的话就能调用该函数了。不明白怎么回事。好像是随机一样。如果我调用一个别的对话框类,然后DoModal,每次都成功。所以我问是不是类指针pCrystalView有问题啊。麻烦您了!!!
追答
指针是没问题的
你如何确定 这个函数有没有 运行?
你启动线程是怎么做的?
用 AfxBeginThread()
还是CreateThread()
指针传递时有问题吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询