C ++ Вызов указателей на функции - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть система функций обратного вызова для организации процессов инициализации и выполнения моего движка.У меня есть класс, который управляет всеми этими указателями на функции, и они хранятся в векторном контейнере STL.Они вызываются через класс-оболочку, например (* iterator) -> execute ();

Когда я вызываю эти указатели, я делаю это в цикле for.Поэтому, если у меня зарегистрировано 20 указателей на функции, они пройдут все 20 и найдут соответствующий тип и вызовут функцию через класс-оболочку.

Мой вопрос: когда вызывается функция указателя, цикл ожидает этого?функция, чтобы завершить свое выполнение и затем продолжить цикл, или цикл продолжает вызывать функции, пока выполняется первая функция?Имейте в виду, что все это происходит в одном потоке.

Я провел небольшое тестирование, и кажется, что цикл не останавливается при выполнении другой функции.Это похоже на что-то вроде псевдо-многопоточности?... это не так.Однако результаты могут быть неверными, так как я использую std :: cout для печати результатов на консоль, поэтому я не знаю, происходит ли это из-за некоторых функций ostream, о которых я не знаю.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

for циклы и использование указателей на функции не будут создавать потоки. Позвоните flush , и вы увидите текст, который вы поставили в очередь. Вы также можете использовать отладчик для отслеживания происходящего.

2 голосов
/ 03 апреля 2012

при вызове функции указателя цикл ожидает завершения этой функции и затем продолжает цикл, или цикл продолжает вызывать функции во время выполнения первой функции?

В этом отношении вызов через указатель ничем не отличается от вызова именованной функции: они оба завершают синхронно , то есть вызывающая сторона ожидает возврата функции.

Наиболее вероятныйпричина связана с консольной буферизацией информации, что может привести к значительным задержкам при отображении того, что находится в очереди.

...