第16月第10天 poco target

Posted lianhuaren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第16月第10天 poco target相关的知识,希望对你有一定的参考价值。

 1.

void TCPServer::start()

{

    poco_assert (_stopped);

 

    _stopped = false;

    _thread.start(*this);

}

 

void Thread::start(Runnable& target)
{
    startImpl(target);
}

...

void ThreadImpl::startImpl(Runnable& target)
{
    if (_pData->pRunnableTarget)
        throw SystemException("thread already running");

    pthread_attr_t attributes;
    pthread_attr_init(&attributes);

    if (_pData->stackSize != 0)
    {
        if (0 != pthread_attr_setstacksize(&attributes, _pData->stackSize))
        {
            pthread_attr_destroy(&attributes);
            throw SystemException("cannot set thread stack size");
        }
    }

    _pData->pRunnableTarget = ⌖
    if (pthread_create(&_pData->thread, &attributes, runnableEntry, this))
    {
        _pData->pRunnableTarget = 0;
        pthread_attr_destroy(&attributes);
        throw SystemException("cannot start thread");
    }
    pthread_attr_destroy(&attributes);

    if (_pData->policy == SCHED_OTHER)
    {
        if (_pData->prio != PRIO_NORMAL_IMPL)
        {
            struct sched_param par;
            par.sched_priority = mapPrio(_pData->prio, SCHED_OTHER);
            if (pthread_setschedparam(_pData->thread, SCHED_OTHER, &par))
                throw SystemException("cannot set thread priority");
        }
    }
    else
    {
        struct sched_param par;
        par.sched_priority = mapPrio(_pData->prio, _pData->policy);
        if (pthread_setschedparam(_pData->thread, _pData->policy, &par))
            throw SystemException("cannot set thread priority");
    }
}
...

void* ThreadImpl::runnableEntry(void* pThread)
{
    _currentThreadHolder.set(reinterpret_cast<ThreadImpl*>(pThread));

#if defined(POCO_OS_FAMILY_UNIX)
    sigset_t sset;
    sigemptyset(&sset);
    sigaddset(&sset, SIGQUIT);
    sigaddset(&sset, SIGTERM);
    sigaddset(&sset, SIGPIPE);
    pthread_sigmask(SIG_BLOCK, &sset, 0);
#endif

    ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread);
    AutoPtr<ThreadData> pData = pThreadImpl->_pData;
    try
    {
        pData->pRunnableTarget->run();
    }
    catch (Exception& exc)
    {
        ErrorHandler::handle(exc);
    }
    catch (std::exception& exc)
    {
        ErrorHandler::handle(exc);
    }
    catch (...)
    {
        ErrorHandler::handle();
    }

    pData->pRunnableTarget = 0;
    pData->done.set();
    return 0;
}

 

 

https://codeload.github.com/JetMeta/ZPoco/zip/master

以上是关于第16月第10天 poco target的主要内容,如果未能解决你的问题,请参考以下文章

第16月第3天 AFURLSessionManager

第16月第31天 mongo

第16月第27天 pip install virtualenv

第25月第4天 djangochinaorg项目记录01

第10月第28天 touchesBegan

第3月第16天 fd_set 32 ACE_TP_Reactor