我的目标是制作一个多路复用滤波器,它采用三个输入引脚并产生一个视频,以秒为单位显示固定内部信号源的图像。
更新 我改变了我的同步机制,但问题仍然是:在第一个输入引脚停止发送样本并且第二个启动后,过滤器停止了
我现在在过滤器中使用一个线程,它每隔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;
}
因此,输入引脚中没有睡眠了。但奇怪的是,这会产生相同的结果。