多线程程序异常之一 “类操作用作多线程”

来源:互联网 发布:淘宝扫不了照片怎么办 编辑:程序博客网 时间:2024/06/06 02:16

今天写了个程序需要使用多线程方法,然后查了MSDN得到如下说明:

Call this function to create a new thread.

 
CWinThread* AfxBeginThread(   AFX_THREADPROC pfnThreadProc,   LPVOID pParam,   int nPriority = THREAD_PRIORITY_NORMAL,   UINT nStackSize = 0,   DWORD dwCreateFlags = 0,   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

 

Parameters

pfnThreadProc

Points to the controlling function for the worker thread. Cannot be NULL. This function must be declared as follows:

 
UINT __cdecl MyControllingFunction( LPVOID pParam );
我就定义了一个类:
class ApplyClient  
{
public:
 ApplyClient();
 virtual ~ApplyClient();
public:// Op
 UINT StartServer(LPVOID pVoid);

private:
 CSocket m_ListenSocket;//
};
下面一段就会出错:error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
CWinThread* m_AppClient= AfxBeginThread(StartServer, (LPVOID) this, THREAD_PRIORITY_BELOW_NORMAL);
到处查、不停的想(5个小时后)终于功夫不负有心人我找到了:原来在类中的操作与一般定义的全局函数不同,从而导致线程启动的失败。
解决方法:在类的声明修改为:
class ApplyClient  
{
public:
 ApplyClient();
 virtual ~ApplyClient();
public:// Op
 static UINT StartServer(LPVOID pVoid);

private:
 CSocket m_ListenSocket;//
};
加油!在C++专家之路上。
 
原创粉丝点击