Google

求救AfxBeginThread创建辅助线程发生错误

来源:互联网  |  作者:GodOfLove  | 点击数: 20

相关内容

我来说两句

1njg_jh 发表于:2009-08-09 21:14:57
UINT   CTestDlg::CommThreadProc(LPVOID   pParam)//线程函数名  
  {  
    //具体的代码实现部分我就不写了,太多了  
  }  
  在头文件中定义为static函数或不要定义为成员函数(UINT   CommThreadProc(LPVOID   pParam))
2gerry2000 发表于:2009-08-09 21:14:57
对,不要定义为成员函数,要定义成成员函数,也要是静态成员函数
3iamknight 发表于:2009-08-09 21:14:57
同意楼上所述  
  线程函数应该是全局有效的,可以设置成静态的或全局的。
4Atomictry 发表于:2009-08-09 21:14:57
UINT   CommThreadProc(LPVOID   pParam)//线程函数名  
  {  
        CTestDlg   *pTestDlg   =   (CTestDlg   *)pParam;  
        pTestDlg->InitComPort();  
        pTestDlg->dosomething();  
        return   0;  
  }  
   
   
  BOOL   CTestDlg::StartMonitoring(   )//按钮响应事件  
  {  
  m_Thread=AfxBeginThread(CommThreadProc,this,THREAD_PRIORITY_ABOVE_NORMAL,0,0,NULL);   //   加上this;  
  }  
   
  或者像楼上所说,把CommThreadProc申明为static;
5GodOfLove 发表于:2009-08-09 21:14:57
我在头文件中把CommThreadProc定义成static函数了,可又出现了别的问题,我调用的一个类的对象(自己写的串口类)在CommThreadProc不能识别啊。各位兄弟,这是咋回事???
6GodOfLove 发表于:2009-08-09 21:14:57
Atomictry(天影):你好,你这种方法我开始也试过了,不行的。出现同样的错误。
7njg_jh 发表于:2009-08-09 21:14:57
CommThreadProc函数不能直接使用成员函数和成员变量
8BBirdlyh 发表于:2009-08-09 21:14:57
如果不对线程做太多控制,就直接用m_Thread=AfxBeginThread(CommThreadProc,NULL),给它两个参数就行,一个是处理函数,一个是参数  
  线程处理函数可以是三种形式:全局的、静态成员函数、普通成员函数。前两种不用说,普通成员函数也是可以的,只是在作为mAfxBeginThread的参数时,要使用一个宏,宏的名字记不清了,可以去查MSDN
9independently 发表于:2009-08-09 21:14:57
俺做了个简单工程,(工程名为CSecondaryThread,基于对话框)进行验证,部分代码如下:  
  在头文件SecondaryThreadDlg.h   声明线程处理函数   UINT   WorkerThreadProc(   LPVOID   Param   );  
  在SecondaryThreadDlg.cpp添加如下代码:  
  UINT   CSecondaryThreadDlg::WorkerThreadProc(   LPVOID   Param   )  
  {  
        CFile   file;  
        file.Open("C:\\Temp\\test.txt",CFile::modeCreate|CFile::modeWrite);  
        CString   strValue;  
        for(int   i=0;i<=100;i++)  
        {  
              strValue.Format("Value:%d",i);  
              file.Write(strValue,strValue.GetLength());   //   Write   to   the   file   for   worker   thread   using   AfxBeginThread  
        }  
        file.Close();  
        return   TRUE;  
  }  
  在按钮事件添加如下代码:  
  void   CSecondaryThreadDlg::OnOK()    
  {  
        AfxBeginThread(WorkerThreadProc,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);  
        MessageBox("Thread   Started");  
  }  
  编译时还是出现LZ同样的错误:error   C2665:   'AfxBeginThread'   :   none   of   the   2   overloads   can   convert   parameter   1   from   type   'unsigned   int   (void   *)'   也额肯请各位之处错误在哪里?????  
   
 
10GodOfLove 发表于:2009-08-09 21:14:57
再顶!分不够我还加!小弟真是郁闷极了
11he_sl 发表于:2009-08-09 21:14:57
楼主,你没有仔细看上面的回复啊  
   
  class   CSecondaryThreadDlg  
  {  
  static   UINT   WorkerThreadProc(   LPVOID   Param   );  
  };  
   
   
  UINT   CSecondaryThreadDlg::WorkerThreadProc(   LPVOID   Param   )  
  {  
  //   若要用对话框指针,这么还原!!!!  
  CSecondaryThreadDlg*   pDlg   =   (CSecondaryThreadDlg*)Param;  
   
      CFile   file;  
        file.Open("C:\\Temp\\test.txt",CFile::modeCreate|CFile::modeWrite);  
        CString   strValue;  
        for(int   i=0;i<=100;i++)  
        {  
              strValue.Format("Value:%d",i);  
              file.Write(strValue,strValue.GetLength());   //   Write   to   the   file   for   worker   thread   using   AfxBeginThread  
        }  
        file.Close();  
        return   TRUE;  
  }  
   
   
  void   CSecondaryThreadDlg::OnOK()    
  {  
        AfxBeginThread(WorkerThreadProc,this,THREAD_PRIORITY_NORMAL,0,0,NULL);  
        MessageBox("Thread   Started");  
  }  
 
12GodOfLove 发表于:2009-08-09 21:14:57
谢谢楼上的所有兄弟哈。我试试
13GodOfLove 发表于:2009-08-09 21:14:57
已经解决了,谢谢诸位!
14he_sl 发表于:2009-08-09 21:14:57
不知我说的对否
15GodOfLove 发表于:2009-08-09 21:14:57
你说得是对的,呵呵。谢谢

女人今日精选

日系MM搭好帽 变身秋季美人

日系MM搭好帽 变身秋季美人

秋天的天气慢慢变凉,帽子也开始成为MM们热购的对象。你知道在这个微凉的季节,一起来看看日系MM的时尚搭配…[详细]

本站部份内容来源网络和网友发布,版权归版权所有人所有,如无意中侵犯了您的利益请联系站长E-mail:fuxm985@qq.com,我们尽快处理。
网络编程之家是公益类学习网站,所有资料仅供学习者免费参考试用。
Copyright © 2009-2010 all Right Reserved 版权所有闽ICP备09030773号