理解全局变量的单例用法



有人建议我在应用程序中使用单例,我想知道这是否是正确的方法。

我有一个windows游戏处理工具应用程序,我正在开发。它由两个窗户组成。一个主窗口和一个快速访问菜单窗口。这些窗口共享类似的组件,就像在两个窗口上,我都有滑块来调整屏幕亮度,音量,cpu TDP等。两个窗口应该显示相同的值。

目前我在一个单独的线程上使用一个静态类来获取这些值。它每隔几秒通过调度计时器循环并获取这些值。需要注意的是,像TDP这样的值需要一个读取CPU MSR或MMIO值的外部程序,因此两个线程不应该并发地调用这些读取例程,因为它可能导致外部程序崩溃。然后将这些值存储到包含"全局变量"的主窗口中的静态类中。变量。

public static class GlobalVariables
{
//TDP global
public static double readPL1 = 0;
public static double readPL2 = 0;
public static double setPL1 = 0;
public static double setPL2 = 0;

//brightness and volume setting
public static int brightness = 0;
public static int volume = 0;
}

我总是希望这个线程和应用程序运行一样长。我认为静态将是合适的,因为这不是一个需要数十个此类运行的扩展应用程序。我也可能需要从这里创建事件。

  1. 在两个窗口中初始化的单例是否具有相同的功能?
  2. 存储的变量是否会在两个窗口中保持一致?
  3. 使用静态例程会导致我的程序出现问题(没有按比例放大)?
  4. 最后一个问题:如果我走单例路线,我希望这段代码从UI单独运行,我应该初始化类在一个新创建的线程在窗口?

提前感谢!

  1. 在两个窗口中初始化的单例是否具有相同的功能?

正确实现的Singleton在应用程序会话中第一次访问时初始化,并在会话持续时间内保持其值。

  1. 存储的变量是否在两个窗口中保持一致?

无论您在代码中何处访问它(从不同的Windows或其他类型的任何程序集),您将始终获得相同的值。

  1. 使用静态例程会导致我的程序出现问题(没有按比例放大的东西)吗?

问题太模糊了。答案来自于任务的细节,选择的实现方法。
静态实现(包括Singleton)可能存在安全问题,因为静态成员具有全局访问权限,并且可以故意进行格式化。
因此,通常只有常量和方法是静态的。
但是WPF中的这种安全性实际上是相当短暂的。
用"实现后,仍然可以从资源、可视化和逻辑树中获得任何窗口及其任何元素。

在可伸缩性方面,如果将来需要添加多个View实例,可能会出现一些问题。然后,它们中的每一个都可能需要自己的数据实例,而不是一个为所有人提供相同数据的静态实例。

  1. 最后一个问题:如果我走单例路线,我希望这段代码从UI单独运行,我应该初始化类在一个新创建的线程在窗口?

如果代码中没有线程相关的元素(通常只有UI元素),那么初始化流程通常无关紧要。
如果初始化很长,那么为了不使GUI滞后,最好异步进行。

相关内容

  • 没有找到相关文章

最新更新