是否有可能在线程运行时从线程获取数据? C ++

时间:2015-11-09 05:29:46

标签: c++ multithreading

我有一个线程作为程序的一部分运行,我需要在程序的持续时间内运行。但是,当我运行程序时,我希望能够定期显示线程上正在处理的数据(不停止它)。

从概念上讲,这是可行的和/或良好的做法吗?从我读过的关于线程的内容来看,似乎为了访问一个线程,你已经让它进入​​睡眠状态,看看你想要什么,然后再次启动它。有没有办法“镜像”那个线程?即使我能做到这一点,直接访问线程是一种好的做法,还是我需要先将信息转储到数据结构然后再读取它?

额外信息:
我不确定这是否有所不同,但我使用C++ CreateThread function创建了一个线程。我刚刚在another post中读到该方法存在内存泄漏问题。但是,我认为我如何创建线程会改变它正在处理的操作系统的级别,并且可能会影响我是否能够访问该线程。

提前感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

您还可以在读取或写入变量之前使用mutex来保护变量:请查看以下C++ Concept: Mutex 此外,Mutex类也很有价值。

如果它只是一个计数器或某种基本类型,您也可以考虑查看atomic类型。

正如其他人所建议的那样,如果你有c ++ 11,请尝试使用std::thread

对于可用于将数据从一个线程发送到另一个线程的异步通知,请查看Qt库及其Signals and Slots机制。

答案 1 :(得分:0)

我认为sleep不是一种选择。

更好的解决方案是使用condition variable来组织阻止队列,例如this

std::thread对于多线程来说是个不错的选择。

所有这一切,您的主线程可以将消息推送到队列,然后您的子线程(弹出消息)将使用它。