我的app使用MFC的doc/view架构,能否这样使用worker thread
在View的类中的函数中 AfxBeginThread(TestFunction, this);TestFunction是一个全局函数,开启一个thread 通过传递的this指针来得到view类
UINT TestFunction(LPVOID pParam)
{
    int iFindItem = 0;
    stBPData bpdata;
    BOOL bRet = FALSE;
    SYSTEMTIME systime;
    CString LineContent; CDXXXView *pClass = (CEDoctorView *)pParam;
这样我就可以在thread中访问view类中的变量了 我总是感觉这样使用不很正常,不知道大家是怎么使用的??

解决方案 »

  1.   

    将CDXXXView *pClass = (CEDoctorView *)pParam;
    改为CDXXXView *pClass = (CDXXXView *)pParam;
    而且,CEDoctorView 的声明 中应该包含一个CDXXXView类型的成员m_DXXXView
      

  2.   

    我的类的名称就是CDXXXView 程序中是否应该这样使用?
    UINT TestFunction(LPVOID pParam) 

        int iFindItem = 0; 
        stBPData bpdata; 
        BOOL bRet = FALSE; 
        SYSTEMTIME systime; 
        CString LineContent; 
        CDXXXView *pClass = (CDXXXView *)pParam;我担心的是这样使用thread 是否OK ?? 其他人怎么使用thread访问其他数据的
      

  3.   

    对m_XXX成员的访问,pClass->m_XXX
      

  4.   

    放心吧,这样使用没有问题,因为所有的线程共享进程的地址空间。但要注意两个问题
    1.保证CDXXXView销毁后TestFunction不再访问它
    2.谨慎使用AfxGetMainWnd,FromHandle等函数,它可能会返回临时对象
      

  5.   

    如果还有其它线程使用CDXXXView,还要注意线程的同步
      

  6.   


    Up,如果传入的线程的参数是不变的,可以用一个数据类封装需要的数据,然后new一个数据类的对象,把这个指针传入线程能安全点。
      

  7.   


    我现在传入线程函数的就是当前View的一个指针,使用this来表示的 当前程序运行时 这个this指针应该永远有效并且是不便的吧? 你说的new 一个对象传入是什么意思??
      

  8.   

    最好是传窗口句柄而不是窗口指针,因为“你不能依赖于对象的持续存在”(MSDN里有说明)
      

  9.   


    关于MFC,我想还是微软更清楚一些。