2016-07-23 174 views
-1

讓一個單線程程序調用一個大的functionLarge(),它需要在調用函數main函數中的下一個代碼行之前完成。假設這個函數很好地分解並且需要很長時間。
在這種answer.wait()建議,我不知道它是否優於:等待函數完成後再繼續主(一個線程)

bool done = false; 
    // returning true at the end, modifies bigObject by refrence 
    done = functionLarge(bigObject); 
    while(!done) { usleep(1000); } 

    //...can now continue 

是否有更好的方法,而無需返回bool

+0

只需停止使用'bool'並讓程序按正常執行順序運行? – MikeCAT

+0

你的做法很糟糕,因爲'dont'的值在分配後不會奇蹟般地改變,所以循環將被取0或無窮大時間。 – MikeCAT

+0

直到'functionLarge'完成後纔會輸入。 – Dacav

回答

1

你太過複雜了,因爲這已經是它的工作原理

正如您所說,它是單線程。控制權將被傳遞到functionLarge,並且在該功能完成之前不會被返回。

你不需要做任何事情。不需要任何bool s或while循環。通過一個單一的線程,究竟會發生什麼「等待」?

int main() 
{ 
    doThis(); 
    nowDoThis(); 
} 
+0

該對象由'functionLarge'修改,並在下一行添加到[交互式標記服務器](http://docs.ros.org/jade/api/interactive_markers/html/classinteractive__markers_1_1InteractiveMarkerServer.html#a7b688e99eeb8cdcc3f8d03c49ec5ef7​​0)。如果沒有這個構造,我就無法將這個標記可視化,並且我追蹤了它,在'functinLarge'完成準備之前添加了這個對象。另外一個簡單的'usleep(1000)'確實有效,所以我假設它的時間。我可以直接看到[Rviz]中的區別(http://wiki.ros.org/rviz/Tutorials/Markers%3A%20Basic%20Shapes#Running_the_Code) – ItsmeJulian

+0

......哦,我想我明白了,錯誤是進一步的up:服務器是一個動態分配的對象,顯然當我移交bigObject時顯然沒有完全初始化。 – ItsmeJulian

+0

不知道你在說什麼。 –

相關問題