23,223
社区成员
发帖
与我相关
我的任务
分享

//tdnlogin.cpp中的一个方法
bool CTdnLogin::StartLogin()
{
......
m_LoginThread.StartThread(LoginThread, this);
//如果我单独在这里创建线程,不加pthread_join也是可以跑的
......
}
......
//然后是ttxthread.cpp中StartThread(LoginThread,this)的实现
bool CTtxThread::StartThread(PFNThreadRun pfnCallback, void *pUsrData)
{
//另外这个PFNThreadRun我不知道是个什么东西
if (m_bRun)
{
return false;
}
m_pfnThreadRun = pfnCallback;
m_pUsrData = pUsrData;
m_bExit = false;
int nRet = pthread_create(&m_thread, NULL, &ThreadFunc, this);
if (0 == nRet)
{
pthread_join(m_thread, NULL);
//这里就必须要加pthread_join了,不然跑都跑不了
m_bRun = true;
return true;
}
else
{
return false;
}
}
//然后再回到tdnlogin.cpp中的loginThread方法
void* CTdnLogin::LoginThread(void *pUsrData){
while(1){}
//再这里面有一个死循环也就是这个线程会一直执行,然后就是StartLogin中的LoginThread后面的代码就不跑了,而是一直执
//行死循环中的逻辑
}
[/quote] PFNThreadRun 就是 (void*)(*start_rtn)(void*)
这代码看不明白,简单的事情何必复杂化
//tdnlogin.cpp中的一个方法
bool CTdnLogin::StartLogin()
{
......
m_LoginThread.StartThread(LoginThread, this);
//如果我单独在这里创建线程,不加pthread_join也是可以跑的
......
}
......
//然后是ttxthread.cpp中StartThread(LoginThread,this)的实现
bool CTtxThread::StartThread(PFNThreadRun pfnCallback, void *pUsrData)
{
//另外这个PFNThreadRun我不知道是个什么东西
if (m_bRun)
{
return false;
}
m_pfnThreadRun = pfnCallback;
m_pUsrData = pUsrData;
m_bExit = false;
int nRet = pthread_create(&m_thread, NULL, &ThreadFunc, this);
if (0 == nRet)
{
pthread_join(m_thread, NULL);
//这里就必须要加pthread_join了,不然跑都跑不了
m_bRun = true;
return true;
}
else
{
return false;
}
}
//然后再回到tdnlogin.cpp中的loginThread方法
void* CTdnLogin::LoginThread(void *pUsrData){
while(1){}
//再这里面有一个死循环也就是这个线程会一直执行,然后就是StartLogin中的LoginThread后面的代码就不跑了,而是一直执
//行死循环中的逻辑
}

