2012-04-02 168 views
0

我有一個回調函數系統來組織我的引擎的初始化和運行時進程。我有一個類管理所有這些函數指針,它們存儲在STL向量容器中。它們通過類似(* iterator) - > execute()的包裝類來調用。C++調用函數指針

當我調用這些指針時,我在for循環中執行它。所以如果我有20個函數指針被註冊,它將會遍歷所有20個函數指針,並找到匹配的類型並通過包裝類調用函數。

我的問題是,當指針函數被調用時,循環是否等待該函數結束其執行,然後繼續循環或循環繼續在第一個函數運行時繼續調用函數?請注意,這一切都發生在同一個線程上。

我做了一些測試,似乎循環不會暫停執行其他功能。這似乎是某種僞線程? ......這看起來不正確。但是,結果可能不正確,因爲我使用std :: cout將結果打印到控制檯,所以我不知道是否由於某些不知道的ostream功能而發生這種情況。

+0

如果你可以發佈一些代碼會更容易嗎?但是,for循環會在調用下一個函數之前等待每個函數完成。其中一個功能可能會產生一個線程。 – hmjd 2012-04-02 21:16:40

+0

很可能這是因爲你沒有用每個std :: cout刷新流。你是用std :: endl還是用「\ n」來終止行? – 2012-04-02 21:17:39

+0

使用您爲每次調用檢查的某種全局變量檢查它?如果你的代碼不是異步的,這種行爲不應該發生。 – chikuba 2012-04-02 21:19:48

回答

2

當指針函數被調用時,循環是否等待該函數結束其執行,然後繼續循環或循環繼續在第一個函數運行時繼續調用函數?

在這方面,通過指針調用不是來自一個名爲函數的調用不同的:他們既要完成同步,即主叫等待函數返回。

最有可能的原因是與控制檯緩衝信息有關,這可能會導致顯示延遲顯示的內容。

2

for循環和使用函數指針不會創建線程。致電flush,您將看到您排隊的文字。你也可以使用調試器來跟蹤發生了什麼。