我想把工作者线程处理函数声明成一个对话框类的成员函数,可以吗?怎么做?
如果不行的话,请问一下,怎么才能把一个handle型的参数传给处理函数呢?(注:我程序中的这个handle型的变量是打开一个串口返回的句柄,想在线程里实现改串口的读工作)

解决方案 »

  1.   

    不是,可以是成员函数传递当前窗口
    AfxBeginThread(ListenThread,(LPVOID)this);UINT ListenThread(LPVOID lparam)
    {
      C****dlg *pwnd = (C***dlg *)lparam;
      ....
    }
      

  2.   

    UINT ListenThread(LPVOID lparam)
    {
      C****dlg *pwnd = (C***dlg *)lparam;
      ....
    }
    这不是全局的吗?如果声明成这样
    UINT CSerialTestDlg::ListenThread(LPVOID lparam)
    {
      C****dlg *pwnd = (C***dlg *)lparam;
      ....
    }
    就会报这个错
    :\zwf\zwf\SerialTest\SerialTestDlg.cpp(300) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void)'
    该怎么办呢?
      

  3.   

    我没记错的话,好像应该把该成员函数申明为静态函数,否则会将隐含的this指针传入线程函数,线程函数只能接受32bit的一个参数,已经传入了一个this,传值会出现错误,所以使用static避免this隐含传递
      

  4.   

    静态函数是这样声明得吗?static UINT ReadThread(LPVOID pParam);
    但是报错说:E:\zwf\zwf\SerialTest\SerialTestDlg.cpp(747) : error C2724: 'ReadThread' : 'static' should not be used on member functions defined at file scope
    不知道是不是我声明的有问题,望指教!
      

  5.   

    你照这样来定义 static unsigned __stdcall ReadThread(LPVOID pParam);应该不会有错的,线程函数要么申明为全局,要么申明为静态成员函数。