Portál AbcLinuxu, 16. května 2025 05:47
connect(m_query, SIGNAL(commited(bool)), this, SLOT(process_stage_2(bool)));
a potom zavolam:
dataSession.commitQuery(m_query);
dataSession ho prida do fronty queryCommiteru a ten ked dojde na to rada tak ma zavolat EfsSqlQuery.exec()
Ten slot process_stage_2(bool) vsak nikdy neni zavolany.
Pokusim sa pridat relevantny kod:
Kod hlavneho vlakna:
connect(m_query.data(), SIGNAL(commited(bool)), this, SLOT(process_stage_2(bool)));
dataSession.commitQuery(m_query);
DataSession:
void sk_efs_server::DataSession::commitQuery(QSharedPointer<EfsSqlQuery> query)
{
sqlMutex->lock();
sqlQueue->append(query);
sqlMutex->unlock();
sqlQueueFull->wakeAll();
}
QueryCommiter:
void sk_efs_server::QueryCommiter::run()
{
QSharedPointer<EfsSqlQuery> query;
forever
{
sqlMutex->lock();
sqlQueueFull->wait(sqlMutex.data());
query = sqlQueue->dequeue();
sqlMutex->unlock();
query->exec();
}
exec();
}
EfsSqlQuery:
bool sk_efs_server::EfsSqlQuery::exec()
{
bool cted = m_query->exec();
emit commited(cted);
return cted;
}
Poznamka: Qt verzie 4.7, skusal som pri pripajani signalu connectom pridat aj argument Qt::QueuedConnection, nepomohlo to, ale malo by to byt aj tak default, ak je signal z ineho vlakna.
Neviete mi prosim poradit preco ten slot neni nikdy zavolany?
Dakujem
Na otázku zatím nikdo bohužel neodpověděl.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.