怎么控制 控制台多线程 结束

如何控制 控制台多线程 结束?
本帖最后由 pro21ms4 于 2015-01-16 21:39:52 编辑
在控制台下面,
类似如下, 要让 continue 为false 来停止线程, 怎么办?  有其他方案更好.

BOOL bConintue = TRUE;

void foo()
{
int i = 0;
while (bConintue)
{
cout << i++ << endl;
Sleep(500);
}
}


------解决思路----------------------
引用:
在图形界面当然好说, 切换下 bool值就ok,  
 控制台不知道怎么控制, 还有控制台的输出被 cout 占用了 , 怎么改变这个 bContinue


听你的描述 感觉你设计应该是这样
你的这个while循环应该放到另外一个线程去跑
而你的console控制用户输入的主线程 一直用于处理用户输入就行  这是一个典型的多线程
否则就如你所说 无法输入了
------解决思路----------------------
虽然单独使用全局变量逻辑上是没有问题的,但一般还是使用线程同步对象为佳,比如:
#include <chrono>
#include <iostream>
#include <mutex>
#include <string>
#include <thread>

using namespace std;
mutex locker;

void foo()
{
    int i = 0;
    while (!locker.try_lock())
    {
        cout << i++ << endl;
        this_thread::sleep_for(chrono::milliseconds(500));
    }
    locker.unlock();
}

int main()
{
    string s;
    locker.lock();
    thread t1(foo);
    getline(cin, s);
    locker.unlock();
    t1.join();
    return EXIT_SUCCESS;
}