c++ - 如何在已执行的方法中传递字段的值?

标签 c++

我意识到我的 Stop() 方法永远不会启动,因为 Start() 方法永远不会停止。同义反复,但这就是为什么这不起作用的答案。那么,如何停止我的 Start() 方法?


我需要在执行 Start()/Stop() 方法时将 isTurnedOn 值更改为 true/false。但是当我以下列方式执行这些方法时: void main(){sw.Start(); sw.Watch(); sw.Stop();} - 时钟永不停止;我应该怎么做才能修复它?

class Stopwatch {
        bool isTurnedOn; 
    }sw;   
    void Stopwatch::Start() {
        isTurnedOn = true;
    }
    void Stopwatch::Stop() {
        isTurnedOn = false;
    }
    void Stopwatch::Watch() {
    while(isTurnedOn)
    {
    h = hours < 10 ? "0" : "";
    s = seconds < 10 ? "0" : "";
    m = minutes < 10 ? "0" : "";
    cout << h << hours << " : " << m << minutes << " : " << s << seconds;
    Sleep(1000);
    system("cls");
    seconds++;
    if (seconds == 60) {
        minutes++;
        seconds = 0;
        if (minutes == 60) {
            hours++;
            seconds = 0;
            minutes = 0;
        }
    }
    }

最佳答案

据我所知,您正在尝试实现 Stopwatch 类,它可以让您测量从某个时刻起经过了多少时间。

请看Stopwatch class from C# ,尤其是在示例中。这是一种可能的方法,而且还不错。这应该暗示您可以如何设计您的类(class)。

最小的界面可以是这样的:

class Stopwatch
{
public:
    // initialises internal state to the current time
    Stopwatch();

    // returns how many milliseconds elapsed since creation of this instance
    uint64_t elapsed_ms();
}

使用 std::chrono 实现它图书馆。

使用示例:

void heavy_func();

int main()
{
    Stopwatch sw;
    heavy_func();
    auto elapsed_ms = sw.elapsed_ms();
    std::cout << "heavy_func() took " << elapsed_ms << " ms\n";
}

您需要根据自己的需要对其进行调整。尽量保持简单,不要陷入“瑞士军刀”的陷阱。

关于c++ - 如何在已执行的方法中传递字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107481/

相关文章:

c++ - 使用节点将实例添加到链表

C++ Arduino串口连接超时

c++ - vector 中不可修改的值?

android - 在 Mac 上编译 Android 时构建 libwebviewchromium.so 时出错

c++ - CreateEventW 意外失败

c++ - 函数指针

c++ - C/C++ Paypal 集成

c++ - 就地重新初始化对象

C++ - 二维数组作为方法参数

c++ - 我应该使用相同的 VBO 来传递不同的顶点属性吗?或者我应该使用 2?