我需要将进程的标准输出(二进制数据)放入字符串缓冲区并在另一个线程中使用它。
这是制作人:
while (ReadFile(ffmpeg_OUT_Rd, cbBuffer, sizeof(cbBuffer), &byteRead, NULL)){
tByte += byteRead; //total bytes
sb->sputn(cbBuffer, byteRead);
}
m_bIsFinished = true;
printf("%d bytes are generated.\n", tByte);
这是消费者:
while (!PCS_DISPATCHER_INSTANCE->IsFinished())
Sleep(200);
Sleep(5000);
Mystringbuf* sb = PCS_DISPATCHER_INSTANCE->sb;
printf("Avail: %d\n", sb->in_avail());
事实证明,消费者无法获得生产者生产的所有字节。( tByte <> sb->in_avail()
)
这是一种内部缓冲问题吗?如果是,如何强制 stringbuf 刷新其内部缓冲区?