Как вызвать функцию внутри функции в C++?



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



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



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

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

868   2  

2 ответов:

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

Таким образом, вы могли бы также написать this->changeStatus(7);, и это также будет работать правильно. Тем не менее, я должен предупредить вас, читая ваш код, что, как написано прямо сейчас, он не создает новый поток, но скорее запуск функции внутри основного потока. Если вы хотите создать дополнительный поток, вам нужен код, чтобы специально это сделать. Это также не проверка чего-либо повторно, но это могут быть детали, которые вы опустили, чтобы упростить вопрос.

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

Comments

    Ничего не найдено.