今天写了个程序需要使用多线程方法,然后查了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++专家之路上。