网狐6.6内核引擎源代码 这个代码居然有错误。。
平时工作当中用网狐开发。不过版本肯定不是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、