您的位置:首页 > 编程语言

网狐6.6内核引擎源代码 这个代码居然有错误。。

2013-06-05 22:38 302 查看
平时工作当中用网狐开发。不过版本肯定不是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、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐