Я пытаюсь что-то сделать с API-интерфейсом обнаружения красных шаров Nao. Я хочу сделать все шаг за шагом. Я написал callbackMutex каждый в начале обратных вызовов. Я отписываю событие в обратном вызове в операторе if.
Функции работают, но иногда выдает ошибку «ИНФО: Достигнут предел потока» или ошибку события отмены подписки.
Нао всегда видит красный шар, но создает много нитей (я думаю). Как я могу использовать только один поток?
Пишу на С++.
Я подписываюсь так:
memory.subscribeToEvent("redBallDetected", "moduleName", "fuctionName");
затем, когда Нао видит мяч, вызывается эта функция.
void moduleName::functionName()
{
ALCriticalSection section(callbackMutex);
//create some proxies and declare some variables
try
{
//do movements
}
catch(const ALError& e) {
qiLogError("module.name") << e.what() << std::endl;
}
}
Я использую setWalkTargetVelocity для обхода робота и проверки оператора if, если он идет или останавливается. Я ничего не использовал, чтобы запустить или остановить поток.