线程函数的问题: 线程函数应定义在类的内部还是外部?若在外部,则不能使用类的数据。如何是好?AfxBeginThread 函数的参数按照资料上的写法:AfxBeginThread(CThreadProc,GetSafeHwnd());编译时出现如下错误: error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)' 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然是内部,外部你的程序如何写?CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );第一个参数错误,正确地为:UINT MyControllingFunction( LPVOID pParam ); 你可以定义一个静态成员函数作为线程函数,来避免c++的this指针问题。 //FThread.h 头文件#pragma onceclass FThread{public: FThread(void); ~FThread(void); HANDLE CreateThread(); virtual DWORD ThreadProc(); DWORD m_dwThreadID; HANDLE m_hThread;protected:private: static DWORD WINAPI Entry(LPVOID lpParam);};//FThread.cpp#include "stdafx.h"#include "Fthread.h"FThread::FThread(void){}FThread::~FThread(void){}HANDLE FThread::CreateThread (){ m_hThread=::CreateThread(NULL,0,Entry,this,0,&m_dwThreadID); return m_hThread;}DWORD FThread::Entry (LPVOID lpParam){ return ((FThread*)lpParam)->ThreadProc ();}DWORD FThread::ThreadProc (){ return 0;}这种方法可以解决你的问题。注意,ThreadProc为虚函数。这样才能保证使用你得载的线程函数。 如何得到CTreeCtrl的层次码 BasicExcel内存问题 请教如何添加某网站的用户登录信息 一个UnmapViewOfFile函数的问题 FD_READ 消息的问题, 请各位帮忙, 新手求问,选中后反色. 一般钩子函数只能捕获系统消息,但是有没有办法捕获系统底层的操作行为呢?比如WORD正在写文件,有没有办法捕获写文件这一个操作? 求教关于用ADO在SQL SERVER服务器上创建数据库的问题?进来看看 100等你拿----CTreeView简单一问。 vc和bcb哪个好 VC下关于重载操作符的问题 一个比较难的问题,帮我解决后500分相送!!(绝不食言)
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);第一个参数错误,正确地为:UINT MyControllingFunction( LPVOID pParam );
#pragma onceclass FThread
{
public:
FThread(void);
~FThread(void); HANDLE CreateThread();
virtual DWORD ThreadProc(); DWORD m_dwThreadID;
HANDLE m_hThread;
protected:
private:
static DWORD WINAPI Entry(LPVOID lpParam);
};//FThread.cpp
#include "stdafx.h"
#include "Fthread.h"FThread::FThread(void)
{
}FThread::~FThread(void)
{
}HANDLE FThread::CreateThread ()
{
m_hThread=::CreateThread(NULL,0,Entry,this,0,&m_dwThreadID);
return m_hThread;
}DWORD FThread::Entry (LPVOID lpParam)
{
return ((FThread*)lpParam)->ThreadProc ();
}DWORD FThread::ThreadProc ()
{
return 0;
}这种方法可以解决你的问题。注意,ThreadProc为虚函数。这样才能保证使用你得载的
线程函数。