如何在发生事件后延迟1秒的应对文件
How to delay coping file for 1s after getting event?
我正在从某些第三方服务器下载文件,我们无法为每个文件获取下载完成事件(至少从服务器中)。大约有20个文件,一旦单个文件下载,我们就需要复制到其他位置(这需要尽可能快)。
要检查是否到达任何新文件,我正在使用ReadDirectoryChanges
API。
while (ReadDirectoryChangesW(
hDir, /* handle to directory */
&buffer, /* read results buffer */
sizeof(buffer), /* length of buffer */
TRUE, /* monitoring option */
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_FILE_NAME,
&bytesReturned, /* bytes returned */
NULL, /* overlapped buffer */
NULL)) /* completion routine */
{
//do file copy after download completes
}
现在问题是我们不确定下载何时完成。我们从ReadDirectoryChanges
获得了多个事件,每次写东西要提交我们都会得到一个事件。
是否有任何方法知道我们要为此获得事件的特定文件完成下载?
作为解决方法,我们决定在开始复制之前等待1秒。但是在那一秒钟内,如果我收到另一个通知,我需要等待另外1秒。
我们将在单独的线程中启动文件复制,并且可以并行进行多个文件副本。
现在我可以使用哪种数据结构跟踪1秒,如果另一个事件发生在两者之间,则应用1秒重新启动?最初,我想到了优先队列,但是我们需要检查每10毫秒是否会发生某些超时。另外,如果将多个元素添加到优先级队列,可能会导致复制文件。
也许我解决这个问题的方式是完全荒谬的。我对更好的方法开放。
收到文件的FILE_ACTION_MODIFIED
事件后,请直接尝试打开文件,拒绝共享写作,但允许共享读取。只要另一个进程打开写作文件,您将无法打开它,因此请等待下一个事件。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何从特定点播放.WAV文件(例如30秒)
- 从C 中录制的PCAP文件中读取纳秒分辨率
- 如何在发生事件后延迟1秒的应对文件
- c++ 将文件时间转换为秒
- Playsound 跳过文件的前半秒,除非音乐播放器程序恰好正在运行
- 文件中时间戳中的秒值有时会被舍入
- 在磁盘上的JSON文件中追加一个JSON数组,每秒使用c++