不是全局的就必须是静态的……你把this当参数传进去好了

解决方案 »

  1.   

    在AfxBeginThread的第二个原型中,可以是一个指向基于CWinThread的类实例的CRuntimeClass指针,这种方法下的线程的消息循环完全是MFC式,很有效且方便编程
      

  2.   

    其实你定义一个结构,传递地址进去就是了撒
    在线程中在进行指针转换,这样就不是全局变量了。
    例子:    typedef struct
    {
    _RecordsetPtr pRecordsets;   //指向记录集
    CListCtrl *m_List;            //指向列表控件
        int nCurrentRecordPos;        //代表当前指针所在的记录
    }ListRecord;  
    线程中    ListRecord* ListCtrlRecord;
    ListCtrlRecord=(ListRecord*)pParam;
    启动线程处:AfxBeginThread(DisplayRemainRecord,
               &ListRecordCurrent,
       THREAD_PRIORITY_NORMAL);
      

  3.   

    可以用另外一种形式:修改你的类,继承CWinThread
    要创建线程时就调用从CWinThread派生的类的成员函数CreateThread.
      

  4.   

    因为类的函数里面多了一个隐含的指针参数,所以编译不通过。
    改成static
      

  5.   

    改成static还是用很多限制啊,比如数据库操作,
    MyDB.CreateInstance(__uuidof(Connection));
    MySet.CreateInstance(__uuidof(Recordset));
    这些都通不过,请指教!
      

  6.   

    其实我想用多线成的初衷是:我在一个对话框里的OnInitDialog函数里做以下操作
    ShowWindow(SW_SHOWMAXIMIZED);
    ..刷成黑色...
    MyDB->Open(..);
    MySet->Open(..);
    即将对话框最大化并刷成黑色。
    但是由于执行了数据库操作,在刷成黑色前会有停顿。
    现在我把数据库操作单独放在另一个函数里(假设为ForDB()),然后PostMessage调用该函数,效果改善了许多。不过发现一个挺奇怪的问题。如果我把ShowWindow(SW_SHOWMAXIMIZED)放在ForDB()里,则对话框启动时首先最大化,但接着有恢复到初始大小。请问这是怎么回事???
      

  7.   

    我想了解您的PostMessage是怎样调用的。给点段子出来。
      

  8.   

    afx_msg void Xfordb();#define WM_FORDB     WM_USER+210BEGIN_MESSAGE_MAP(CZimu, CDialog)
    //{{AFX_MSG_MAP(CZimu)
    ...
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_FORDB,Xfordb)
    END_MESSAGE_MAP()PostMessage(WM_FORDB);
      

  9.   

    接我的上一个问题。我用了PostMessage后,在OnInitDialog里就不能再执行
    MyDB,MySet的相关操作,否则会出现异常。我的理解是系统对ForDB()里用到的变量采取了保护措施。但是在其他函数里还可以用,哪位大虾给我详细解释一下?谢了
      

  10.   

    拷!又出问题了。用了PostMessage后,在debug下没问题,在release下就出问题了,大虾们快来啊
      

  11.   

    好象第一个参数必须是个全局变量,MSDN中有说明
      

  12.   

    WM_FORDB的处理函数的类型不能为无参数,要有两个参数才行,一个是WPARAM,一个是LPARAM
      

  13.   

    谢谢老蒋,还希望您能解释一下我的另一个问题:
    改成static还是有很多限制啊,比如数据库操作,
    MyDB.CreateInstance(__uuidof(Connection));
    MySet.CreateInstance(__uuidof(Recordset));
    这些都通不过,请指教!
      

  14.   

    有没有CoInitialize?
    参见
    http://www.csdn.net/expert/topic/628/628779.xml?temp=.3779413