gpt4 book ai didi

c++ - C++ 中的数据持久性 - 建议更好的方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:44 25 4
gpt4 key购买 nike

我们正在开发一种复制工具,它可以定期将不同的文件夹从客户端计算机复制到服务器计算机。

当必须复制特定文件夹时,将在客户端创建一个复制对象(由我们的服务模块),该对象通过网络将文件夹中存在的文件的内容发送到服务器。在服务器上创建一个相应的接收对象(由我们的服务模块)来接收文件。

简而言之:

客户端抽象 - 复制对象(在其自己的线程中运行),其职责是发送文件。服务器端抽象 - 接收对象(在其自己的线程中运行),负责接收内容并创建/更新文件。

现在有一个额外的要求,我们需要某些计数器,比如发送的总字节数、接收的总字节数、上次复制时间……对于每个被复制的文件夹。只要我们的服务正在运行,这些计数器就需要持久化(不需要在我们的服务/机器重新启动时持久化)。

为了整合这些变化,我们正在讨论两种方法。

请注意 - 需要在整个复制周期内维护计数器。

方法 1:对象重用

使计数器成为复制、接收对象的一部分,并在服务处于事件状态时保持接收和复制对象处于事件状态。现在对于线程,可以采取以下任何一种方法。

  1. 保持对象和线程处于事件状态(线程进入休眠状态)。现在在下一个复制周期中,对象和线程(唤醒线程)被重新使用。

  2. 允许线程退出,持久化复制、接收对象。现在在下一个复制周期;复制、接收对象重新创建线程或从线程池中获取线程。

方法2:封装

将计数器封装在一个单独的类中。现在,每当实例化接收/复制对象以复制文件夹时。要么

  1. 传递计数器对象,corr。到文件夹作为接收/复制对象构造函数的参数。

  1. 接收/复制对象向经理询问文件夹对应的计数器对象。

在方法 1 和方法 2 中哪个更好,为什么?

最佳答案

我会选择第二种方法。考虑一次复制多个文件的场景。您当前的设计已经支持这一点,只需使用其复制对象生成另一个线程。

如果你选择第二条路线,你仍然可以让计数器对象保留在主线程中,从你的工作线程接收信号来更新计数器。然而,第一种方法不支持这种情况。

另一个场景:计数的实时 View 。如果你有一个 gui 或任何显示当前数据速率等的东西,它不应该在工作线程中运行。无论如何,您都必须向 gui 线程发出信号。在那个地方完成计数已经派上用场了。

总结一下:对我来说,您的情况下的第二种方法似乎更灵活。它也是对当前设计引入较少更改的一种(您仍然可以丢弃对象并保留每个复制都有自己的对象范例)。

关于c++ - C++ 中的数据持久性 - 建议更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994835/

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