我正在创建一个程序,该程序将从远程机器接收消息,并需要将这些消息写入磁盘文件。我遇到的困难在于,该程序的目的是测试接收消息的库的性能,因此我需要确保将消息写入磁盘不会影响库的性能。该库通过回调函数将消息传递给程序。另一个困难是解决方案必须是平台无关的。
我有哪些选项?
我考虑了以下几点:
我有哪些选项?
我考虑了以下几点:
- 使用
boost:asio
写入文件,但是似乎(请参见this文档),异步写入文件在该库的Windows特定部分中 - 因此无法使用。 - 使用
boost::interprocess
创建消息队列,但是this documentation指出有三种方法可以发送消息,并且所有方法都需要程序阻塞(隐式或不隐式)如果消息队列已满,则我不能冒这个风险。 - 创建一个
std::deque<MESSAGES>
从回调函数中将消息推入双端队列中,并在写入文件时弹出消息(在单独的线程上),但是STL容器not guaranteed to be thread-safe。我可以锁定推到和弹出双端队列,但我们正在谈论连续消息之间的47微秒,因此我想完全避免锁定。
有没有更多关于可能解决方案的想法?