网狐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、

posted @ 2013-06-05 22:38  swlilike  阅读(1861)  评论(1编辑  收藏  举报