Я знаю, что не разрешено вызывать функцию другого потока в Mainthread. Разрешено ли вызывать сигнал из другого потока без каких-либо проблем? Допустим, что этот код находится в MainWindow:QThread сообщить threadsafe
thread-> moveTOThread (obj); emit obj-> Signal();
спасибо
или это путь:
Obj.h
signals:
void testSignal();
public slots:
void Func();
MainWindow.h
void testSignal();
MainWindow.cpp
thread->moveTOThread(obj);
connect(this,SIGNAL(testSignal()),obj,SIGNAL(testSignal()));
emit testSignal();
Obj.cpp
connect(this,SIGNA(testSignal()),this,SLOT(Func()));
Я просто хочу как-то вызвать функцию obj. Поскольку obj-> Func(); не является потокобезопасным. Я ищу потоковый режим. Я могу испустить сигнал от obj и подключить этот сигнал в obj-конструкторе к Slot Func(). Как я могу назвать Func() threadsafe ???? – Bob
@Bob Предполагая, что «класс B» является объектом, живущим в другом потоке, просто подключите сигнал от «класса A» к слоту в «классе B». Вам не нужно подключать сигнал из класса «B» к слоту в «классе B», а затем вызывать этот сигнал. – thuga
@Bob well ... вы можете просто вызвать эту функцию напрямую, если хотите, вас никто не остановит. Но он нарушает границу потока и не безопасен для этого. Чтобы безопасно вызвать функцию объекта, механизм должен отправить сигнал ... его как две строки кода дополнительно! Одна линия для подключения, одна линия, чтобы излучать сигнал (о да, и вам нужно объявить сигнал) ... вот и все! то вся эта суета уходит.Альтернативно, если это какая-то «вспомогательная» функция, в которой вам не нужен экземпляр объекта, вы можете сделать его статической функцией ... что ваш прецедент? или что делает ваша функция? –