Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 抽象Gui API中的计时器_C++_User Interface - Fatal编程技术网

C++ 抽象Gui API中的计时器

C++ 抽象Gui API中的计时器,c++,user-interface,C++,User Interface,以下是我想做的基本想法: 每个小部件,当Gui的一部分可以访问事件管理器时。事件管理器是多态的,因此它包含来自底层图形/计时器api的函数。我想做的是,允许小部件注册计时器,它们将调用一个函数,该函数将在内部调用事件管理器来注册计时器。问题是,当小部件第一次创建时,它不是Gui的一部分。因此,没有人可以在小部件构造函数中注册计时器 我想到了这样一个事实,即我可以对请求进行排队,当小部件成为gui的一部分时,它可以访问事件管理器,然后它可以对请求进行排队,但问题是它实际上不允许我执行以下操作: T

以下是我想做的基本想法:

每个小部件,当Gui的一部分可以访问事件管理器时。事件管理器是多态的,因此它包含来自底层图形/计时器api的函数。我想做的是,允许小部件注册计时器,它们将调用一个函数,该函数将在内部调用事件管理器来注册计时器。问题是,当小部件第一次创建时,它不是Gui的一部分。因此,没有人可以在小部件构造函数中注册计时器

我想到了这样一个事实,即我可以对请求进行排队,当小部件成为gui的一部分时,它可以访问事件管理器,然后它可以对请求进行排队,但问题是它实际上不允许我执行以下操作:

Timer *timer = registerTimer(0.17);

if(timer == NULL)
{
   //uh ohs
}
else
{
   timer->start();
}
有没有更好的办法来解决我的问题


感谢

事件管理和提供计时功能是两种截然不同的功能,因此我将尝试将事件管理器解耦为两个独立的类。然后,您可以使
timermager
成为一个单例,并从您喜欢的任何地方注册计时器


或者,如果您不能像现在这样解耦事件管理器类,您可以尝试将其设置为单例,并以这种方式访问计时工具。

我确实考虑过这一点,唯一的问题是我不喜欢OOP中的单例:(嗯,我明白了。虽然有时使用它们似乎很自然。例如,在widget ctor中注册计时器应该是完全合法的,如何在不将
TimerManager
作为参数传递的情况下实现这一点?为了将来的参考,“GUI”通常是用大写或不大写编写的。这只是让我感到不安的一点小问题。)