2012-03-06 3 views
2

문제점 : C++ 함수를 통해 차례로 다른 Singleton C++ 함수를 호출하는 스레드 함수를 실행해야합니다. 이 함수는 C 함수 (10 밀리 초마다 임베디드 시스템 상태를 변경하기 위해 무한 루프를 실행 함)를 호출합니다.C++에서 함수 내부 함수를 호출하는 방법?

질문 : C++의 함수 내에서 함수를 어떻게 호출합니까? 두 번째 함수를 호출하기 위해 인스턴스를 할당해야합니까?

샘플 코드를 참조하고 옳고 그른지 생각해보십시오. 내가 싱글 톤 클래스가
은 싱글이

class Singleton 
{  
    private : // constructors and values 
    public : 
      void runThread(); 
      Singleton getInstance(); 
      bool ChangeStatus(int a);  
    }; 

void Singleton:: runThread() 
{  
    changeStatus(7); // is this is right way to call function inside function 
} 

bool Singleton:: changeStatus(int a); 
{ 
    // This calls C function which changes the status of embedded system 
}  

void main() 
{ 
    // create instance of singleton class 

    Singleton *instance1 = Singleton::getInstance(); 

    instance1.runThread();  
    /* will this call the function changeStatus and will this  
     changeStatus function will change status of embedded system 
     assuming the c function to change status is working fine. 
    */ 
} 

기본 구문 오류를 무시하십시오 말한다. 나는 주에서 runThread 함수를 호출 할 때
는 것이 성공적으로 changeStatus 함수를 호출하거나 수정 한 후 (서면 나는 코드에서 싱글 instance2 = Singleton::getInstance(); instance2->changeStatus

+2

질문이 있으십니까? 그렇다면 무엇입니까? –

+0

미안 Keith, 나는 아주 명확하지 않았다. 나는 내 질문을 업데이트했다. 그것을 참조 하시고 친절하게 여러분의 생각을 나누십시오. – samantha

+1

** 무효 ** getInstance(); ? instance1 **. ** runThread(); ? –

답변

1

작성된대로 함수 호출이 정확합니다. 정적이 아니고 다른 멤버 함수를 호출하는 멤버 함수 안에 있으면 같은 인스턴스에서 호출합니다. 함수가 호출 된 인스턴스에 대한 포인터에 액세스해야하는 경우 키워드 this을 사용할 수도 있습니다.

따라서 this->changeStatus(7);으로 작성하면 올바르게 작동합니다.

즉, 코드를 읽지 마라 지금 당장은 새로운 스레드를 작성하지 않고 주 스레드 내부에서 함수를 실행한다는 경고를해야합니다. 추가 스레드를 생성하려면 특별히 수행해야 할 코드가 필요합니다. 반복적으로 점검하는 것도 아니지만 질문을 단순화하기 위해 생략 한 세부 정보 일 수 있습니다.

+0

안녕 키스, 답장을 보내 주셔서 감사합니다. 글쎄,이 포인터를 사용하는 것에 다소 혼란 스러웠지만, 당신은 나의 의심을 해소했습니다. 고마워. 또한 그래, 나는 물건을 단순화하기 위해 많은 세부 사항을 chalked있다. – samantha

2

같은 changeStatus 뭔가를 호출 할 내부 runThread을 하나 더 인스턴스를 지정해야합니까 모든 명백한 오류) Singleton::runThread()instance1에서 호출 될 때 실제로 instance1에서 Singleton::changeStatus(int)을 호출합니다.

+0

감사합니다. celtschk. – samantha

관련 문제