平时工作当中用网狐开发。不过版本肯定不是6.6,具体也不知道是什么版本,反正没有源码的啦。
从网上下载这么一个引擎源码。 我也没编译。
之所以下载这个是想自己写一个服务器。 拿来借鉴的。
好了 ,说错误的地方: 数据库队列中 应该有一个地方调用死循环了
like this while(1){//do something}
找到找代码的确有这样的地方
//线程运行
while (pServiceThread->m_bRun)
{
#ifndef _DEBUG
//运行版本
try
{
if (pServiceThread->OnEventThreadRun()==false)
{
break;
}
}
catch (...) { }
#else
//调试版本
if (pServiceThread->OnEventThreadRun()==false)
{
break;
}
#endif
咋一看没啥事。。不过问题出在 pServiceThread身上
它是 通过CServiceThread::StartThread 启动的线程。
然后CQueueServiceThread 是继承于CServiceThread的。
//启动线程
bool CServiceThread::StartThread()
{
…………………………
//设置变量
ThreadParameter.bSuccess=false;
ThreadParameter.pServiceThread=this;
ThreadParameter.hEventFinish=CreateEvent(NULL,FALSE,FALSE,NULL);
//启动线程
m_bRun=true;
m_hThreadHandle=(HANDLE)::_beginthreadex(NULL,0,ThreadFunction,&ThreadParameter,0,&m_uThreadID);
……………………
}
问题就出在
ThreadParameter.pServiceThread=this;它是继承类。怎么能等于本身的呢。。
改了一下
//启动线程
bool CServiceThread::StartThread(CServiceThread *pQueueThread)
{
……………………
//设置变量
ThreadParameter.bSuccess=false;
ThreadParameter.pServiceThread=pQueueThread;
ThreadParameter.hEventFinish=CreateEvent(NULL,FALSE,FALSE,NULL);
//效验状态
ASSERT(ThreadParameter.hEventFinish!=NULL);
if (ThreadParameter.hEventFinish==NULL) return false;
//启动线程
m_bRun=true;
m_hThreadHandle=(HANDLE)::_beginthreadex(NULL,0,ThreadFunction,&ThreadParameter,0,&m_uThreadID);
}
OK、