nclsadidas 发表于 2008-6-5 14:41:07

封装模块时遇到的问题...

void ServerActivate_Post( edict_t *pEdictList, int edictCount, int clientMax )
{
      GetServerData();
      return ;
}

void GetServerData()
{
      DWORD tid;
      HANDLE handle = NULL;
      if (handle == NULL)
      {
                handle = CreateThread(NULL, 0, &GetServerDataThread, 0, 0 , &tid);
                if (handle != NULL)
                {
                        CloseHandle(handle);
                        handle = NULL;
                }
       }
}

DWORD WINAPI GetServerDataThread(void *lpParameter)
{
         //写日志..
         return 0;
}

在我的模块里调用"ServerActivate_Post".然后在"GetServerData()"里创建线程.但是发现一个奇怪的现象..我的线程里的东西都执行了两次(同样的日志写了两份)
为什么会出现这样的问题?是不是服务器启动或换图的时候"ServerActivate_Post"会执行两次呢?
不知道大虾们有没有遇到这样的问题??

zwfgdlc 发表于 2008-6-5 15:04:15

回复: 封装模块时遇到的问题...

ServerActivate_Post()
的一般是用 RETURN_META(MRES_IGNORED);
这个作返回的,不知道是不是跟这个有关

jim_yang 发表于 2008-6-5 15:33:11

回复: 封装模块时遇到的问题...

void ServerActivate_Post(edict_t *pEdictList, int edictCount, int clientMax)
{
if(g_activated)
RETURN_META(MRES_IGNORED);

g_activated = true;
RETURN_META(MRES_IGNORED);
}

int DispatchSpawn(edict_t* pent)
{
g_activated = false;
RETURN_META_VALUE(MRES_IGNORED, 0);
}

nclsadidas 发表于 2008-6-5 16:59:59

回复: 封装模块时遇到的问题...

小弟不才...RETURN_META(MRES_IGNORED);
返回值具体是什么意思...

jim_yang 发表于 2008-6-5 17:57:08

回复: 封装模块时遇到的问题...

返回值在这里没什么作用Post function是在函数执行以后发出的,所以你的返回值没有意义。之所以用返回值是为了告诉其它模块这个函数是就在你这里终止还是继续发送给其它模块。
页: [1]
查看完整版本: 封装模块时遇到的问题...