У меня есть Qt-приложение.Один из моих классов ViewSimulation
имеет статический метод loggingHandler
, который вызывает (испускает) класс-сигнал logging
.Метод loggingHandler
будет передан как указатель на функцию в c-файл publisher.c
.publisher.c
вызывает свой указатель функции (*logger)
в отдельном потоке.
При отладке я вижу publisher.c
звонки ViewSimulation::loggingHandler
и сигналы logging
испускаются, но подключенный слот не реагирует.Но если вызов / выброс logging
в основном потоке, слот &ViewGooseList::logging)
среагирует.
Почему слот не реагирует на "вызов" от другого c-thread in publisher.c
?
ViewSimulation.cpp / h
class ViewSimulation : public QGroupBox
{
...
signals:
void logging(int id, uint64_t timestamp);
private:
static void loggingHandler(int id, uint64_t timestamp);
ViewSimulation* ViewSimulation::m_current;
...
void ViewSimulation::loggingHandler(int id, uint64_t timestamp)
{
emit ViewSimulation::m_current->logging(id, timestamp);
}
...
connect(m_gooseSimulation, &ViewSimulation::logging, m_gooseList, &ViewGooseList::logging);
setLogging(loggingHandler);
publisher.c / h
/*Header*/
void setLogging(void (*logging)(int, uint64_t));
static void (*logger)(int gooseId, uint64_t timestamp);
/*C-File*/
void setLogging(void (*logging)(int, uint64_t))
{
logger = logging;
}
...
/*This methode will be called from main-thread **AND** from second thread */
logger(gooseMessage->id, gooseMessage->lastTimeStamp);
...