1

我正在为大型应用程序开发文件系统观察程序。原始版本为我FileSystemWatcher班级的每个实例运行了一个监视线程。但是,这会创建太多线程。

该应用程序由许多 DLL“插件”组成,每个插件都静态链接我的文件系统观察程序类所在的基本库:

在此处输入图像描述

现在这些 DLL 可能不共享一个用于文件系统监视的线程(它们甚至可能不使用完全相同版本的库进行编译),但是每个插件,a.dllb.dll图片中,应该有一个线程来处理所有文件系统监视请求. 我可以处理实现,但我不知道如何为每个 dll 提供一个实例。

这个想法是有一个单例,但每个 dll 有一个变量实例:

class FileSystemWatcherManager
{
public:
  static FileSystemWatcherManager* Instance()
  {
    // How to make it single instance per dll?
    static FileSystemWatcherManager instance;
    return &instance;
  }
};

如何实现?

4

1 回答 1

3

在 Windows 上,如果未dllexport编辑静态存储持续时间变量,则每个 DLL 和 EXE 文件都将拥有自己的副本。因此,只需确保既不FileSystemWatcherManager也不FileSystemWatcherManager::Instance从 DLL 中导出,并且您应该得到您想要的行为。

于 2019-09-10T11:31:15.543 回答