我正在研究用C ++编写的多线程应用程序。我使用一些临时文件在我的线程之间传递数据。一个线程将要处理的数据写入目录中的文件。另一个线程扫描目录中的工作文件并读取文件并进一步处理它们,然后删除这些文件。我必须使用这些文件,因为如果我的应用程序被杀,我必须保留尚未处理的数据。
但我讨厌使用多个文件。我只想使用一个文件。一个线程连续写入文件和其他线程读取数据并删除已读取的数据。 就像从顶部和底部填充一个容器,我可以从容器中获取和删除数据。如何在C ++中有效地做到这一点,首先是有办法......?
答案 0 :(得分:3)
正如您在使用像SQLite这样的数据库的问题的评论中所建议的可能是一个非常好的解决方案。 但是,如果您坚持使用文件,那么这当然是可能的。
我自己做过一次 - 使用文件在磁盘上创建了一个持久队列。
以下是如何实现这一目标的指南:
以下是阅读和写作的方案(可能有一些小的逻辑错误,但你应该可以从那里拿出来):
<强> READER 强>
您可能还希望读者偶尔为您压缩文件:
<强> WRITER 强>
希望这能让你踏上写作轨道
答案 1 :(得分:2)
win32Api函数CreateFileMapping()
使进程能够共享数据,多个进程可以使用系统分页文件存储的内存映射文件。
一些好的链接:
http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx
http://www.codeproject.com/Articles/34073/Inter-Process-Communication-IPC-Introduction-and-S
http://www.codeproject.com/Articles/19531/A-Wrapped-Class-of-Share-Memory
答案 2 :(得分:0)
您可以写入每行的处理行数据,每行的分隔符表示此记录是否处理