gpt4 book ai didi

c++ - 通过引用传递与通过指针传递 : Boost threads and deadline timer

转载 作者:太空宇宙 更新时间:2023-11-04 14:06:57 25 4
gpt4 key购买 nike

我有这个简单的程序,它使用 boost 库在 1 秒内输出递增的整数:

#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/asio.hpp>
using namespace std;


void func1(bool* done)
{
float i=0;
while (!(*done))
{
cout << i << " ";
i++;
}
return;
}

void timer(bool* done, boost::thread* thread)
{
boost::asio::io_service io;
boost::asio::deadline_timer timer(io, boost::posix_time::seconds(1));
timer.wait();
*done = true;
return;
}

int main()
{
bool done = false;

boost::thread thread1(func1, &done);
boost::thread thread2(timer, &done, &thread1);
thread2.join();
thread1.join();
}

该代码的迭代有效,但是我最初是在 main 函数中定义的 bool 通过引用传递给函数 func1 和 thread。即:

void func1(bool& done) /*...*/ while (!(done))
/* ... */
void timer(bool& done, boost::thread* thread) /*...*/ done = true;

使用线程定义:

    boost::thread thread1(func1, done);
boost::thread thread2(timer, done, &thread1);

当我那样执行它时,func1() 中的循环永远不会终止!我在 timer() 的返回处添加了一个断点,我的 IDE(MS VC++ express 2010)表明 bool done 确实具有 true 值,即使在 func1() 中也是如此。

关于为什么会发生这种情况的任何见解?

最佳答案

要通过引用传递参数,请使用 boost:ref:

boost::thread thread1(func1, boost::ref(done));

关于c++ - 通过引用传递与通过指针传递 : Boost threads and deadline timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com