引导序列中的多线程应用程序 - C++/Debian
Multithreaded application at boot sequence - C++/Debian
我从 2 天起就遇到了这个晦涩难懂的问题:我在 debian 系统上用 C++ 创建了一个启动时启动应用程序,在我集成了一些多线程元素之前它工作得很好。
- 只有 2 个线程(1 个主线程和 1 个子线程)
- 我在 makefile 中包含了 -lpthread 和 -pthread
- 我尝试了 /.config/autostart 和 .desktop 文件方法(相同
结果)
- 程序是用 sudo 启动的
- 任何地方都没有error/crash,主线程工作正常,但是
子线程仅运行 1 次迭代然后由于某种原因停止
- 甚至尝试在 lxsession 引导序列中添加一些睡眠
- 如果我在终端中启动与自动启动文件相同的命令行(sudo 或不),它会完美运行。
已经 2 天了,我还是一无所知!
如果有人以前经历过这种情况或能从中找到一些逻辑,我将不胜感激。
在我看来,您的新逻辑中只是...一个错误。您在 multi-threading 逻辑的设计中犯了一个错误,以至于 child 线程只运行一次迭代。 (或者,更可能的是,在 infinite-wait 中停止 。等待一个从未发出信号的事件,一个从未引发的信号量,一个干涸的队列填充,依此类推。)
如果您 post 摘录相关代码,我们可以为您提供进一步帮助...仅说明 如何 child 线程启动以及如何启动它与 parent 交互。 (Condition-variables、信号量和 so-forth,这可能是您错误的症结所在。)
我建议"all the other stuff is irrelevant."你不需要"a sleep in the boot-sequence"(如果序列等待你的程序完成,和如果它需要).我建议在我看来,您只是在新代码中有一个 bug,它引入了 multi-threading.
并且您可能希望考虑 multi-threading 是否有优势,因为您拥有同一事物的 non-threaded 版本并且可以正常工作。如果要完成的处理曾经(成功地)由单个线程完成,则此类处理可能会或可能不会被 "n threads." 处理 应该 你 find-and-fix 这个错误,还是放弃更改并恢复到有效的?只有您可以决定...
谢谢大家的建议。
我找到了一个 "fix" : 运行 终端中的启动程序 ('@lxterminal -e url/to/program &' in autostart lxsession)而不是背景似乎以某种方式修复它。虽然没有 GUI ...这是一项服务。
多线程逻辑在这里没有问题,这不是我的第一次尝试,我真的很想保留这个功能 (@Mike Robinson)。
我也会按照建议重新考虑 sudo 的使用,考虑到所有事情,这似乎很粗略。它可能会在后台获取 运行。谢谢@datenwolf.
我从 2 天起就遇到了这个晦涩难懂的问题:我在 debian 系统上用 C++ 创建了一个启动时启动应用程序,在我集成了一些多线程元素之前它工作得很好。
- 只有 2 个线程(1 个主线程和 1 个子线程)
- 我在 makefile 中包含了 -lpthread 和 -pthread
- 我尝试了 /.config/autostart 和 .desktop 文件方法(相同 结果)
- 程序是用 sudo 启动的
- 任何地方都没有error/crash,主线程工作正常,但是 子线程仅运行 1 次迭代然后由于某种原因停止
- 甚至尝试在 lxsession 引导序列中添加一些睡眠
- 如果我在终端中启动与自动启动文件相同的命令行(sudo 或不),它会完美运行。
已经 2 天了,我还是一无所知! 如果有人以前经历过这种情况或能从中找到一些逻辑,我将不胜感激。
在我看来,您的新逻辑中只是...一个错误。您在 multi-threading 逻辑的设计中犯了一个错误,以至于 child 线程只运行一次迭代。 (或者,更可能的是,在 infinite-wait 中停止 。等待一个从未发出信号的事件,一个从未引发的信号量,一个干涸的队列填充,依此类推。)
如果您 post 摘录相关代码,我们可以为您提供进一步帮助...仅说明 如何 child 线程启动以及如何启动它与 parent 交互。 (Condition-variables、信号量和 so-forth,这可能是您错误的症结所在。)
我建议"all the other stuff is irrelevant."你不需要"a sleep in the boot-sequence"(如果序列等待你的程序完成,和如果它需要).我建议在我看来,您只是在新代码中有一个 bug,它引入了 multi-threading.
并且您可能希望考虑 multi-threading 是否有优势,因为您拥有同一事物的 non-threaded 版本并且可以正常工作。如果要完成的处理曾经(成功地)由单个线程完成,则此类处理可能会或可能不会被 "n threads." 处理 应该 你 find-and-fix 这个错误,还是放弃更改并恢复到有效的?只有您可以决定...
谢谢大家的建议。
我找到了一个 "fix" : 运行 终端中的启动程序 ('@lxterminal -e url/to/program &' in autostart lxsession)而不是背景似乎以某种方式修复它。虽然没有 GUI ...这是一项服务。
多线程逻辑在这里没有问题,这不是我的第一次尝试,我真的很想保留这个功能 (@Mike Robinson)。
我也会按照建议重新考虑 sudo 的使用,考虑到所有事情,这似乎很粗略。它可能会在后台获取 运行。谢谢@datenwolf.