这是我的简单示例
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()
使得我无法实现
答案 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");
}