2013-05-31 24 views
1

我在同一時間使用Poco::ServerApplicationPoco::TaskManager,並遇到有線問題。Poco :: ServerApplication的多線程問題

如果開始時沒有​​選項,一切正常。但是,從​​開始時,傳遞給任務管理器的任務永遠不會啓動。我用gdb調試了它,發現當使用​​選項時,taskmanager內部任務池中的線程已經啓動並很快停止。所以當調用TaskManager::start時,它只是使用已經完成的線程,因此任務從未開始。

我不知道這是因爲對Linux守護進程有任何限制,或者是否還有其他問題會導致此問題?

下面是可以在我的盒子上重現問題的示例代碼。
http://codepaste.net/jhoyt5

對不起,我可憐的英語:P。我會感謝任何想法?

回答

3

從官方ServerApplication文檔:

新的線程只能在初始化()或主()或方法從那裏被稱爲被創建,但不是在應用程序類的構造函數或實例變量的構造函數。原因是fork()將被調用以創建守護進程,並且在調用fork()之前創建的線程將不會被接管到守護進程。

+0

嗯,其實我找到了原因...謝謝你〜 – Aetf

0

我有這個相同的問題。實際上我並沒有在構造函數中啓動線程,而是在構造函數中創建了Poco :: TaskManager容器。一旦我在我的main()中創建它,一切正常。