我有一个线程作为程序的一部分运行,我需要在程序的持续时间内运行。但是,当我运行程序时,我希望能够定期显示线程上正在处理的数据(不停止它)。
从概念上讲,这是可行的和/或良好的做法吗?从我读过的关于线程的内容来看,似乎为了访问一个线程,你已经让它进入睡眠状态,看看你想要什么,然后再次启动它。有没有办法“镜像”那个线程?即使我能做到这一点,直接访问线程是一种好的做法,还是我需要先将信息转储到数据结构然后再读取它?
额外信息:
我不确定这是否有所不同,但我使用C++ CreateThread function创建了一个线程。我刚刚在another post中读到该方法存在内存泄漏问题。但是,我认为我如何创建线程会改变它正在处理的操作系统的级别,并且可能会影响我是否能够访问该线程。
提前感谢您的任何建议!
答案 0 :(得分:1)
您还可以在读取或写入变量之前使用mutex
来保护变量:请查看以下C++ Concept: Mutex
此外,Mutex类也很有价值。
如果它只是一个计数器或某种基本类型,您也可以考虑查看atomic类型。
正如其他人所建议的那样,如果你有c ++ 11,请尝试使用std::thread。
对于可用于将数据从一个线程发送到另一个线程的异步通知,请查看Qt库及其Signals and Slots机制。
答案 1 :(得分:0)
我认为sleep
不是一种选择。
更好的解决方案是使用condition variable来组织阻止队列,例如this。
std::thread
对于多线程来说是个不错的选择。
所有这一切,您的主线程可以将消息推送到队列,然后您的子线程(弹出消息)将使用它。