启动序列中的多线程应用程序 - C ++ / Debian

时间:2016-08-04 14:13:15

标签: c++ linux multithreading boot autostart

我从2天开始就遇到了这个模糊不清的问题:我在debian系统上用C ++创建了一个启动启动应用程序,它在我集成一些多线程元素之前一直运行良好。

  • 只有2个主题(1个主要和1个小孩)
  • 我在makefile
  • 中包含了-lpthread和-pthread
  • 我尝试了/.config/autostart和.desktop文件方法(同样的 结果)
  • 程序使用sudo
  • 任何地方都没有错误/崩溃,主线程正常,但是 子线程只运行1次迭代,然后由于某种原因停止
  • 甚至试图在lxsession启动序列中添加一些睡眠
  • 如果我启动的命令行与终端中的自动启动文件相同(sudo或不启用),它可以正常工作。

已经2天了,我就没有了! 如果有人以前经历过这个或者可以找到一些逻辑,我将永远感激。

2 个答案:

答案 0 :(得分:1)

在我看来,你的新逻辑只是...... 一个错误。您在多线程逻辑的设计中出错,这样子线程只运行一次迭代。 (或者,更有可能的是,在无限等待中停止。等待从未发出信号的事件,永不提升的信号量,干涸且永不填充的队列,依此类推。)

如果您发布相关代码的摘录,我们可以为您提供进一步的帮助...仅说明如何启动子线程以及它与父线程的交互方式。 (条件变量,信号量等等,这可能是错误的关键所在。)

我会建议"所有其他的东西都无关紧要。"你不需要在启动序列中睡一觉#34; (如果序列等待程序完成,,如果需要)。我建议在我看来,你的新代码中只有...... bug 引入了多线程。

并且您可能希望考虑多线程是否有利,因为您有一个正常工作的相同事物的非线程版本。如果要完成的处理过去(成功)由单个线程完成,则此类处理可能会或可能不会更有利地由" n 线程处理。" 你应该找到并修复这个错误,还是放弃改变并恢复到有效的状态?只有你可以决定......

答案 1 :(得分:0)

谢谢大家的建议。

我发现了一个“修复”:在终端中运行启动程序('lxterminal -e url / to / program& '在lxsession的自动启动中)而不是背景似乎修复它不知何故。虽然没有GUI ......它是一种服务。

多线程逻辑在这里没有错,不是我的第一枪,我真的想保留这个功能(@Mike Robinson)。

我也会重新考虑使用sudo,这看起来很粗略。它可能会让它在后台运行。谢谢@ datenwolf。