Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在无限循环中启动和停止(切换)多个线程_C++_Multithreading_Visual Studio_Visual C++ - Fatal编程技术网

C++ 如何在无限循环中启动和停止(切换)多个线程

C++ 如何在无限循环中启动和停止(切换)多个线程,c++,multithreading,visual-studio,visual-c++,C++,Multithreading,Visual Studio,Visual C++,我试图找到一个解决方案,在无限循环中启动和停止多个线程 每个线程都应该是一个独立的任务,并且应该并行运行。线程在无限循环中开始,线程本身也在无限循环中得到。每个循环都应该以“GetKeyState”停止,这样我就可以切换线程了。但是我无法启动例如2个线程(程序的函数),因为.join()阻塞了执行,没有.join()线程就无法工作 你们有解决这个问题的办法吗?一个线程的切换开始等于线程无限循环的切换停止 这是我试过的一些代码 #包括 #包括 #包括 类键切换{ 公众: 按键切换(int键):m

我试图找到一个解决方案,在无限循环中启动和停止多个线程

每个线程都应该是一个独立的任务,并且应该并行运行。线程在无限循环中开始,线程本身也在无限循环中得到。每个循环都应该以“GetKeyState”停止,这样我就可以切换线程了。但是我无法启动例如2个线程(程序的函数),因为.join()阻塞了执行,没有.join()线程就无法工作

你们有解决这个问题的办法吗?一个线程的切换开始等于线程无限循环的切换停止

这是我试过的一些代码


#包括
#包括
#包括
类键切换{
公众:
按键切换(int键):mKey(键),mActive(假){
运算符bool(){
if(GetAsyncKeyState(mKey)){
如果(!mActive){
mActive=真;
返回true;
}
}
其他的
mActive=假;
返回false;
}
私人:
int mKey;
bool-mActive;
};
按键开关(VK_NUMPAD1);
按键切换开关2(VK_NUMPAD2);
void threadFunc(){
while(!toggle){

std::cout用@Someprogrammerdude的思想解决问题


#包括
#包括
#包括
#包括
标准::原子原子1=假;
标准::原子原子2=假;
std::原子原子AtogleStopall=假;
类键切换{
公众:
按键切换(int键):mKey(键),mActive(假){
运算符bool(){
if(GetAsyncKeyState(mKey)){
如果(!mActive){
mActive=真;
返回true;
}
}
其他的
mActive=假;
返回false;
}
私人:
int mKey;
bool-mActive;
};
按键开关(VK_NUMPAD1);
按键切换开关2(VK_NUMPAD2);
void threadFunc(){
while(atoglestopall==false)
{ 

如果(aToggle1){std::cout,如我所说,如果我不使用.join(),我会遇到一个异常,并且无法启动线程,因为它调用abort(),那么一个布尔标志是“切换”的呢并由每个线程检查。如果标志已清除,线程将执行它应该执行的操作,如果设置,线程将不执行任何操作,直到标志再次变为清除。无意冒犯,但仅编写代码以消除异常从长远来看是行不通的。此处的
join
完全没有意义。至于
join问题,在
main
函数退出之前连接线程的末尾创建一个新循环。可以简化:
while(true){if(atoglestopall)break;if(atogle1){std::cout可以进一步简化:
while(atoglestopall==false){if(atogle1){std::cout