关于一个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;
};
是不是在窗口初始化时就应该把该窗口句柄给传进去?应该怎样做呢。线程是在这个类里面创建的
展开
 我来答
lgao622
2012-11-09 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
在本类中使用 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。
返回的指针可能是临时的,不能被保存以供将来使用。
追问
还有我想问的是,我有一个成员函数TestResult();在线程里用。如
{//线程里面
CCrystalView *pCrystalView=(CCrystalView *)lpParam;
pCrystalView->TestResult();//成员函数
}
运行线程以后,这个函数有时候就没调用,如果停线程再开始的话就能调用该函数了。不明白怎么回事。好像是随机一样。如果我调用一个别的对话框类,然后DoModal,每次都成功。所以我问是不是类指针pCrystalView有问题啊。麻烦您了!!!
追答
指针是没问题的
你如何确定 这个函数有没有 运行?
你启动线程是怎么做的?
用 AfxBeginThread()
还是CreateThread()
指针传递时有问题吗?
565210
2012-11-08 · TA获得超过358个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:347万
展开全部
LPVOID lpParam 是临时的指针变量,函数运行完成后自动释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-08
展开全部
debug看指针pCrystalView的值不是CCrystalView对象的地址不就行了。往线程里传指针的方法是没有问题的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式