线程 - 在没有异步的情况下执行类似的线程

时间:2016-04-07 05:49:40

标签: c++ multithreading c++11 asynchronous

我试图做一个示例线程程序,其中线程的产生是在while循环中。我不想生成多个线程。无论线程是否完成执行,while循环都应该继续运行。在while循环中调用上述线程的.get()函数。同样,只有在线程正确执行时才需要调用它。

我的代码如下:

#include <iostream>
#include <future>
#include <thread>
#include <chrono>

int thread(int varJ)
{
    std::cout<<"\t\t"<<varJ<<std::endl;
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    return varJ;  
}

int main()
{
    int varI = 0;
    std::future<int> future = std::async(std::launch::async, [](){return 0;});
    std::future_status status;
    bool flag = false;

    while(1)
    {
        status = future.wait_for(std::chrono::milliseconds(0));
        if(status == std::future_status::ready && !flag)
        {
            future = std::async(std::launch::async, thread, varI);
            flag = true;
        }
        status = future.wait_for(std::chrono::milliseconds(0));
        if(status == std::future_status::ready && flag)
        {
            std::cout << "\t result is " << future.get() << '\n';
            future = std::async(std::launch::async, [](){return 0;});
            flag = false;
        }
        varI++;
    }
}

获得的输出:

    0
 result is 0
    865
 result is 865
    1723
 result is 1723
    2632
 result is 2632
    3590
 result is 3590
    4551
 result is 4551
    5509
 result is 5509

输出正如我预期的那样。 现在,考虑这样一个事实,即在线程内部进行的函数调用来自另一个依赖于boost库和cuda库的库,并导致代码中的一些未知错误导致它崩溃。这是对第三方库的调用,我不想最终尝试修复该错误,但是想探索除异步之外的其他选项。

可以为代码提供哪些不同的方法来展示我在上面提到的代码中使用async的相同输出。使用boost :: thread和p_thread是两个选项,但我无法使用任何这些方法获得类似于此程​​序的代码。

0 个答案:

没有答案