render: improved threading stability

This commit is contained in:
itsmattkc
2021-04-24 18:21:33 +10:00
parent b07e132dbb
commit fcb344bd4e
11 changed files with 293 additions and 206 deletions
+12 -26
View File
@@ -42,38 +42,22 @@ void RenderTicketWatcher::SetTicket(RenderTicketPtr ticket)
ticket_ = ticket;
// Lock ticket so we can query if it's already finished by the time this code runs
QMutexLocker locker(ticket->lock());
if (ticket_->IsFinished(false)) {
connect(ticket_.get(), &RenderTicket::Finished, this, &RenderTicketWatcher::TicketFinished);
if (!ticket_->IsRunning(false) && ticket_->GetFinishCount(false) > 0) {
// Ticket has already finished before, so we emit a signal
locker.unlock();
emit Finished(this);
} else {
connect(ticket_.get(), &RenderTicket::Finished, this, &RenderTicketWatcher::TicketFinished);
TicketFinished();
}
}
bool RenderTicketWatcher::WasCancelled()
bool RenderTicketWatcher::IsRunning()
{
if (ticket_) {
return ticket_->WasCancelled();
} else {
return false;
}
}
bool RenderTicketWatcher::IsFinished()
{
if (ticket_) {
return ticket_->IsFinished();
} else {
return false;
}
}
bool RenderTicketWatcher::HasStarted()
{
if (ticket_) {
return ticket_->HasStarted();
return ticket_->IsRunning();
} else {
return false;
}
@@ -95,10 +79,12 @@ QVariant RenderTicketWatcher::Get()
}
}
void RenderTicketWatcher::Cancel()
bool RenderTicketWatcher::HasResult()
{
if (ticket_) {
ticket_->Cancel();
return ticket_->HasResult();
} else {
return false;
}
}