在C 中,如何在x秒后在类中重置变量
In C++ how to reset variables in a class after X seconds?
本文关键字:变量 更新时间:2023-10-16
我需要在x秒通过后重置某些值。我正在使用这样的东西,但我不知道它可能遇到什么问题:
class Points
{
public:
Points();
~Points();
void reset();
...
private:
int number;
static void resetAfter5seconds(Points* points);
};
在创建器中,我初始化了一个分离的线:
Points::Points(){
thread start(resetAfter5seconds, this);
start.detach();
}
void Points::resetAfter5seconds(Points* points){
while(true){
std::this_thread::sleep_for( (std::chrono::seconds(5)));
points->reset();
}
}
这有效,但我不知道这是否是正确的方法。它有内存问题吗?,有什么选择?
您的代码不是线程安全的,如果代码的其余部分是单线线程,则使其安全性可能太多了。也许您可能会有一个不需要螺纹功能的简单模式,例如仅检查创建以来5秒的时间是否经过,类似的时间;
class Points
{
public:
Points() {creationtime = time(0); /* do the rest of init */ }
~Points();
void method1() { test_and_reset(); /* do the rest of logic...*/ }
void method2() { test_and_reset(); /* do the rest of logic...*/ }
...
private:
time_t creationtime;
void test_and_reset() {
time_t now = time(0);
if (now > creationtime + 5) { /*reset*/ }
}
};
上面的简单实现还意味着,一旦删除对象,您就不会遇到线程访问无效内存的问题,并且您将不必弄清楚如何杀死胎面。
懒洋洋地做。这里不需要线程。添加getter(私有或公共),仅通过getter访问变量(可能是对应的设置器)。
在Getter中,检查重置时间是否活跃(简单的布尔标志以最大程度地减少开销),然后检查是否过去了足够的时间,然后重置该值。最后像简单的getter一样返回值。
或,如果您的应用程序具有事件循环和事件驱动的体系结构(可能不是在此处添加以完成完整),请添加计时器事件以重置该值。仍然不需要线程使矩阵复杂。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 变量没有改变?通过向量的函数调用