Появилась проблема с зависанием gui. Пытался запустить в отдельном потоке: mainwindow.cpp
sip *mysip = new sip;
QThread *sip_thread = new QThread(this);
mysip->moveToThread(sip_thread);
sip_thread->start();
mysip->resiveSipParameters(login,pass); //передаем логин и пароль в sip.cpp для запуска авторизации
mysip->startSip();
sip.cpp
sip::sip(QObject *parent) : QObject(parent)
{
}
void sip::resiveSipParameters(QString login, QString pass)
{
SipLogin = login;
SipPass = pass;
qDebug() << SipLogin;
qDebug() << SipPass;
}
void sip::startSip()
{
int ret = 0;
Endpoint ep;
try
{
ep.libCreate();
// sipReady(ep);
ret = PJ_SUCCESS;
}
catch (Error & err)
{
// std::cout << "Exception: " << err.info() << std::endl;
// ret = 1;
}
// Init library
EpConfig ep_cfg;
ep_cfg.logConfig.level = 6;
ep_cfg.logConfig.filename = "/home/alexey/crm/sip.log";
ep.libInit(ep_cfg);
// Transport
TransportConfig tcfg;
tcfg.port = 5060; //5080 mango
ep.transportCreate(PJSIP_TRANSPORT_UDP, tcfg);
// Start library
ep.libStart();
// std::cout << "*** PJSUA2 STARTED ***" << std::endl;
// Add account
AccountConfig acc_cfg;
acc_cfg.idUri = ("sip:"+SipLogin+"@***.mangosip.ru").toStdString();
acc_cfg.regConfig.registrarUri = "sip:***.mangosip.ru";
acc_cfg.sipConfig.authCreds.push_back(AuthCredInfo("digest", "*", SipLogin.toStdString(), 0, SipPass.toStdString())); //подставляем полученный логин и пароль
// std::auto_ptr<MyAccount> acc(new MyAccount);
// acc->create(acc_cfg);
qDebug() << SipLogin;
qDebug() << SipPass;
MyAccount *acc = new MyAccount;
try
{
acc->create(acc_cfg);
}
catch(Error& err)
{
std::cout << "Account creation error: " << err.info() << std::endl;
}
// Just wait for ENTER key
std::cout << "Press ENTER to quit..." << std::endl;
std::cin.get();
}
В итоге все равно окно mainwindow
зависает. Нужно ли еще делать connect
для очереди?
Из документации на функцию moveToThread
:
Changes the thread affinity for this object and its children. The object cannot be moved if it has a parent. Event processing will continue in the targetThread.
После выполнения функции обработка событий будет осуществляться в другом потоке. Вы же используете прямой вызов функций resiveSipParameters
и startSip
, тем самым функции выполняются в основном GUI-потоке.
Будет правильно использовать сигналы и слоты:
QObject::connect(sip_thread, &QThread::started, mysip, [&login, &pass, mysip]() {
mysip->resiveSipParameters(login, pass);
mysip->startSip();
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь загрузить изображение из файла, но ловится такая ошибка:
Эта функция принимает вектор типа char и возвращает числоВ каждой ячейке вектора хранится одна цифра
Всем доброго времени, появилась некоторая необходимость в языке, который я не знаю абсолютноСобственно, по заданию необходимо сделать ввод...