2012-04-02 7 views
0

내 엔진의 초기화 및 런타임 프로세스를 구성하는 콜백 함수 시스템이 있습니다. 이러한 모든 함수 포인터를 관리하는 클래스가 있으며 STL 벡터 컨테이너에 저장됩니다. 그들은 (* iterator) -> execute()와 같은 래퍼 클래스를 통해 호출됩니다.C++ 함수 포인터 호출

나는이 포인터를 for 루프에서 호출한다. 그래서 20 개의 함수 포인터를 등록했다면 20 개를 모두 거치고 일치하는 타입을 찾고 래퍼 클래스를 통해 함수를 호출합니다.

제 질문은 포인터 함수가 호출 될 때 루프가 해당 함수가 실행을 끝내기를 기다렸다가 루프를 계속 수행하는지 또는 첫 번째 함수가 실행되는 동안 루프가 함수를 계속 호출합니까? 이 문제는 모두 같은 스레드에서 발생합니다.

약간의 테스트를했는데 다른 기능을 실행하는 동안 루프가 일시 중지되지 않는 것 같습니다. 이것은 어떤 종류의 psuedo-threading처럼 보입니까? ... 그건 옳지 않은 것 같아. 그러나 콘솔에 결과를 출력하기 위해 std :: cout을 사용하고 있기 때문에 결과가 올바르지 않을 수 있습니다. 따라서이 기능이 일부 ostream 기능으로 인해 나올지 모르겠다는 것을 알지 못합니다.

+0

일부 코드를 게시하는 것이 더 쉬울 수 있습니까? 그러나'for' 루프는 다음 함수를 호출하기 전에 각 함수가 완료 될 때까지 대기합니다. 함수 중 하나가 스레드를 생성 할 수 있습니다. – hmjd

+0

대부분의 경우 스트림이 각 std :: cout으로 플러시되지 않기 때문일 수 있습니다. std :: endl 또는 "\ n"으로 줄을 종료 하시겠습니까? –

+0

모든 통화에 대해 확인하는 일종의 전역 변수를 사용하여 확인하십시오. 코드가 비동기 적이 지 않으면이 동작이 발생하지 않아야합니다. – chikuba

답변

2

포인터 함수가 호출 될 때 루프는 해당 함수가 실행을 끝내기를 기다린 후 루프를 계속 수행합니까? 아니면 첫 번째 함수가 실행되는 동안 루프가 함수를 계속 호출합니까? 이와 관련

포인터를 통해 호출은 지정된 함수를 호출 다르지 않다 : 그들은 모두 완료 동기, 즉 함수가 리턴하는 호출자 기다린다.

가장 큰 이유는 버퍼링 정보와 정보를 버퍼링하는 것과 관련이 있으며, 대기열에 표시되는 내용이 지연 될 수 있습니다.

2

for 함수 포인터를 사용하면 스레드가 생성되지 않습니다. flush으로 전화하면 대기중인 텍스트가 표시됩니다. 디버거를 사용하여 진행 상황을 추적 할 수도 있습니다.