Как вызвать функцию внутри функции в C ++? - PullRequest
2 голосов
/ 07 марта 2012

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

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

1 голос
/ 07 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...