gpt4 book ai didi

c++ - 对 WriteFile 的异步调用会导致写入中断吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:12 25 4
gpt4 key购买 nike

我有一个假设场景,其中文件句柄以异步模式打开,并且一些线程附加到该文件句柄。它们通过将 OVERLAPPED 结构的 OffsetOffsetHigh 部分设置为 0xFFFFFFFF 来追加,如 MSDN article for WriteFile 中所述。

我能否在第一次追加完成之前以这样的追加模式发出第二次写入,并期望文件包含第一个追加的全部内容,然后是第二个追加的全部内容?还是我必须等到前一个写入完成后才能发出以下异步写入?

最佳答案

是的。有用。我在一家使用类似方案的公司工作,尽管为了让他们的搜索调用每次都能正常工作,以已知大小(大约 2Gb...)预定义文件,然后在最后截断文件。

但是,您可以通过在每次写入之前转到正确的位置来“追加”。不过,您必须自己处理这个职位。

而且每个线程都必须“当然”地以原子方式访问文件。

一个简单的例子:

lock mutex
seek to position
write data
position += data size
unlock mutex

当然,我假设在您从任何线程调用此函数之前文件已正确打开。

除非您首先创建一个大文件(这非常快,因为所有零的文件都是虚拟创建的),否则您不能做的一件事是根据帧号等因素在某个位置查找。因此,如果线程 3 想要以“size * 3”写入,而这发生在线程 2 以“size * 2”写入之前,那么 seek() 将失败...

关于c++ - 对 WriteFile 的异步调用会导致写入中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20368337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com