是否可以在C ++中用另一个线程终止线程?

时间:2018-09-06 14:10:31

标签: c++ multithreading

我想编写一个程序,其中许多功能可以同时运行。我已经弄清楚了,为了做到这一点,我需要使用线程。 在我的程序中,以不同的温度和速度加热和旋转物体的例程必须循环运行一段确定的时间。时间过去后,我希望该过程继续进行下一个加热/旋转(...)。我的想法是编写一个“计时器线程”,它可以某种方式结束当前例程,然后跳到下一个例程。这可能吗?

2 个答案:

答案 0 :(得分:0)

我想大多数方法都是在工作线程和发出停止工作信号的线程之间使用一个共享标志。

因此您可能会遵循以下原则:

// Use a std::atomic_bool to signal the thread safely
void process_stuff(std::atomic_bool& stop_processing)
{
    while(!stop_processing) // do we keep going?
    {
        // do some measurements or action

        std::this_thread::sleep_for(std::chrono::milliseconds(1)); // wait for next action
    }
}

在另一个线程中的其他地方...

std::atomic_bool stop_processing{false};

// start thread (use std::ref() to pass by reference)
std::thread proc_thread(process_stuff, std::ref(stop_processing));

// wait for some time...
std::this_thread::sleep_for(std::chrono::seconds(3));

stop_processing = true; // signal end
proc_thread.join(); // wait for end to happen

// now create a new thread...

在启动线程中,通过更改变量stop_processing的值,您可以向正在运行的线程发出停止循环的信号,在这种情况下,它可以正常结束。

答案 1 :(得分:0)

检查:

true