2012-03-06 6 views
2

Проблема: С помощью функции C++ мне нужно запустить функцию потока, которая в свою очередь вызывает другую функцию Singleton C++. Эта вызываемая функция вызовет функцию C (которая запускает бесконечный цикл для изменения состояния встроенной системы за каждые 10 миллисекунд).Как вызвать функцию внутри функции в C++?

Вопрос: Как я могу назвать функцию внутри функции в C++? Нужно ли назначать экземпляр для вызова 2-й функции?

Пожалуйста, обратитесь к образцу кода и дайте свои мысли о его правильности или неправильности.
У меня есть одноэлементный класс сказать Singleton

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 или мне нужно указать еще один экземпляр внутри runThread называть changeStatus что-то вроде Синглтон instance2 = Singleton::getInstance(); instance2->changeStatus

+2

У вас есть вопросы? Если так, то, что это? –

+0

Извините, Кейт, я не очень поняла. Я обновил свой вопрос. Пожалуйста, обратитесь к нему и любезно поделитесь своими мыслями – samantha

+1

** void ** getInstance(); ? instance1 **. ** runThread(); ? –

ответ

1

Вызов функции, как указано правильно. Когда вы находитесь внутри функции-члена, которая не является статической, и вы вызываете другую функцию-член, она вызывает ее в том же экземпляре. Если вам нужен доступ к указателю на экземпляр, на который была вызвана функция, вы также можете использовать ключевое слово this.

Вы так же можете написать this->changeStatus(7); и он также будет работать правильно.

При этом я должен предупредить вас, прочитав ваш код, что, как написано прямо сейчас, он не создает новый поток, а скорее выполняет функцию внутри основного потока. Если вы хотите создать дополнительный поток, вам нужен код, чтобы это сделать. Это также не проверяет что-либо многократно, но это могут быть детали, которые вы опустили, чтобы упростить вопрос.

+0

Привет, Кит, спасибо за ответ. Ну, я был немного смущен использованием этого указателя, но вы очистили мои сомнения. Спасибо за это. Также да, я записал много деталей, чтобы упростить все. – samantha

2

В коде, как написано (после коррекции все очевидные ошибки) Singleton::runThread(), при вызове instance1, действительно вызовет Singleton::changeStatus(int) на том же instance1.

+0

спасибо celtschk. – samantha

Смежные вопросы