尽早结束c ++线程

时间:2018-12-07 12:14:30

标签: c++ multithreading visual-c++ thread-safety abort

这是我的简单示例

var i = 0
    func animationVersion4(){
        let name = (i % 2 == 0) ? "1.png" : "2.png"
        uiImage.image = UIImage.init(named: name)
        let transition: CATransition = CATransition.init()
        transition.duration = 1.0
        transition.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionFade
        uiImage.layer.add(transition, forKey: nil)
        i += 1
    }

我的问题是,如果cin在10毫秒内未返回任何值,我希望它退出线程。我尝试过类似#include <iostream> #include <windows.h> #include <thread> using namespace std; int x, counter; int zero = 0; void example() { x = 1; cin >> x; } int main() { do { thread T1(example); Sleep(10); if (x == 1) { counter++; } else { //kill thread without calling abort() } } while (zero == 0); } 之类的事情,但是只是等待它结束。而且,如果我跳过T1.join()并且循环重新启动系统调用T1.join()本身。.

那么我如何在不调用abort()std::terminate()的情况下安全地结束线程?

PS:请回答简单,不要使用任何高级技术,因为这对C ++来说还很陌生。也请尝试解释您的答案中的所有内容,因为我查找的大多数答案都有我无法理解和无法理解的内容,例如我所理解的abort()使得我无法实现

1 个答案:

答案 0 :(得分:-2)

我通过使用detach然后使用解构~来修复它。 这是我的操作方式:

void IOLogic()
{
    exitkey = false;
    cout << ">>";
    cin >> key;
    switch (key)
{
case 'a': direction = 1;
    break;
case 'd': direction = 3;
    break;
case 's': direction = 2;
    break;
case 'x': GameEnd = true;
    break;
case '0': direction = 2;
    break;
}
    exitkey = true;
}
    thread mainLogic(IOLogic);
    Sleep(1500);
    if (exitkey == true)
    {
        mainLogic.detach();
    }
    else
    {
        mainLogic.detach();
        mainLogic.~thread();
        system("cls");
    }