当前位置: 首页>>代码示例>>C++>>正文


C++ ConnectionReader::readEnvelope方法代码示例

本文整理汇总了C++中ConnectionReader::readEnvelope方法的典型用法代码示例。如果您正苦于以下问题:C++ ConnectionReader::readEnvelope方法的具体用法?C++ ConnectionReader::readEnvelope怎么用?C++ ConnectionReader::readEnvelope使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ConnectionReader的用法示例。


在下文中一共展示了ConnectionReader::readEnvelope方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: read

bool PortReaderBufferBase::read(ConnectionReader& connection)
{
    if (connection.getReference()!=nullptr) {
        //printf("REF %ld %d\n", (long int)connection.getReference(),
        //     connection.isValid());
        return acceptObjectBase(connection.getReference(), nullptr);
    }

    if (mPriv->replier != nullptr) {
        if (connection.getWriter()) {
            return mPriv->replier->read(connection);
        }
    }
    PortReaderPacket *reader = nullptr;
    while (reader==nullptr) {
        mPriv->stateSema.wait();
        reader = mPriv->get();
        if (reader && reader->getReader() == nullptr) {
            PortReader *next = create();
            yAssert(next != nullptr);
            reader->setReader(next);
        }

        mPriv->stateSema.post();
        if (reader==nullptr) {
            mPriv->consumeSema.wait();
        }
    }
    bool ok = false;
    if (connection.isValid()) {
        yAssert(reader->getReader()!=nullptr);
        ok = reader->getReader()->read(connection);
        reader->setEnvelope(connection.readEnvelope());
    } else {
        // this is a disconnection
        // don't talk to this port ever again
        mPriv->port = nullptr;
    }
    if (ok) {
        mPriv->stateSema.wait();
        bool pruned = false;
        if (mPriv->ct>0 && mPriv->prune) {
            PortReaderPacket *readerPacket =
                mPriv->dropContent();
            pruned = (readerPacket!=nullptr);
        }
        //mPriv->configure(reader, false, true);
        mPriv->pool.addActivePacket(reader);
        mPriv->ct++;
        mPriv->stateSema.post();
        if (!pruned) {
            mPriv->contentSema.post();
        }
        //YARP_ERROR(Logger::get(), ">>>>>>>>>>>>>>>>> adding data");
    } else {
        mPriv->stateSema.wait();
        mPriv->pool.addInactivePacket(reader);
        mPriv->stateSema.post();
        //YARP_ERROR(Logger::get(), ">>>>>>>>>>>>>>>>> skipping data");

        // important to give reader a shot anyway, allowing proper closing
        YARP_DEBUG(Logger::get(), "giving PortReaderBuffer chance to close");
        mPriv->contentSema.post();
    }
    return ok;
}
开发者ID:jgvictores,项目名称:yarp,代码行数:66,代码来源:PortReaderBufferBase.cpp


注:本文中的ConnectionReader::readEnvelope方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。