输入引脚的接收线程休眠后,滤波器停止

时间:2014-03-25 09:15:19

标签: c++ directshow

我的目标是制作一个多路复用滤波器,它采用三个输入引脚并产生一个视频,以秒为单位显示固定内部信号源的图像。

更新 我改变了我的同步机制,但问题仍然是:在第一个输入引脚停止发送样本并且第二个启动后,过滤器停止了

我现在在过滤器中使用一个线程,它每隔x秒休眠一次,并设置一个状态变量来指示当前工作的inputpin:

TimeGiver::TimeGiver(int countTimetakers, int millisecondsWait)
{
    running = true;
    this->countTimeTakers = countTimetakers;
    this->waitIntervall = millisecondsWait;
}


TimeGiver::~TimeGiver()
{
}

void TimeGiver::start()
{
    running = true;
    while (running)
    {
        for (int i = 0; i < this->countTimeTakers; i++)
        {
            this->currentOwner = i;

            this->sleep((time_t) this->waitIntervall);

        }

    }
}


bool TimeGiver::isItTimeFor(int id)
{
    return currentOwner == id;
}



void TimeGiver::sleep(time_t delay)
{
    time_t timer0, timer1;
    time(&timer0);
    do
    {
        time(&timer1);
    } while ((timer1 - timer0) < delay);
}

void TimeGiver::stop()
{
    this->running = false;
}

输入引脚使用如下:

HRESULT CMyInputPin::Receive(IMediaSample *pSample)
{

    if (filter->m_pTimeGiver->isItTimeFor(this->m_position))
    {
        std::string strPos = std::to_string(this->m_position);


        std::string message = std::string("In Input receive function (sending data)") + strPos;
        mylogger->LogDebug(message.c_str(), L"D:\\TEMP\\yc.log");
        filter->acceptFilterInput(this->Name(), pSample);
        return S_OK;
    }
    return S_OK;




}

因此,输入引脚中没有睡眠了。但奇怪的是,这会产生相同的结果。

0 个答案:

没有答案