int CloseTable(char *table,FILE *fp) { fclose(fp); UnlockTable(table,LOCK_NORMAL); return(0); }
void MainWindow::StopJudging() { //qDebug()<<"STOP"; Global::g_is_judge_stoped = true; if (is_locked) { judge_thread->StopJudge(); judge_thread->WaitForFinished(2000); } Global::g_contest.SaveResultCache(); UnlockTable(); }
void MainWindow::StartJudging(int row, int column) { if (is_locked) return; Global::g_is_judge_stoped = false; board_table->ClearHighlighted(); board_table->horizontalHeader()->setSectionsMovable(false); board_table->horizontalHeader()->setSortIndicatorShown(false); board_table->horizontalHeader()->setSortIndicator(-1, Qt::AscendingOrder); board_table->setSelectionMode(QAbstractItemView::NoSelection); detail_table->StartLastJudgeTimer(); detail_table->ClearDetail(); LockTable(); ui->action_configure->setEnabled(false); ui->action_set_list->setEnabled(false); ui->action_export->setEnabled(false); ui->action_refresh->setEnabled(false); ui->action_judge_selected->setEnabled(false); ui->action_judge_unjudged->setEnabled(false); ui->action_judge_all->setEnabled(false); ui->action_stop->setEnabled(true); judge_thread = new JudgeThread(row, column, this); connect(judge_thread, &JudgeThread::titleDetailFinished, detail_table, &DetailTable::onAddTitleDetail); connect(judge_thread, &JudgeThread::noteDetailFinished, detail_table, &DetailTable::onAddNoteDetail); connect(judge_thread, &JudgeThread::pointDetailFinished, detail_table, &DetailTable::onAddPointDetail); connect(judge_thread, &JudgeThread::scoreDetailFinished, detail_table, &DetailTable::onAddScoreDetail); connect(judge_thread, &JudgeThread::itemJudgeFinished, board_table, &BoardTable::onSetItemUnselected); connect(judge_thread, &JudgeThread::labelTextChanged, board_table, &BoardTable::onUpdateLabelText); connect(judge_thread, &JudgeThread::sumLabelChanged, board_table, &BoardTable::onUpdateSumLabel); connect(judge_thread, &JudgeThread::problemLabelChanged, board_table, &BoardTable::onUpdateProblemLabel); if (row == -1) // Judge selected { for (int i = 0; i < Global::g_contest.player_num; i++) for (auto j : Global::g_contest.problem_order) if (board_table->item(i, j + 2)->isSelected()) judge_thread->AppendProblem(i, j + 2); } else if (row == -2) // Judge unjudged { for (int i = 0; i < Global::g_contest.player_num; i++) for (auto j : Global::g_contest.problem_order) if (Global::g_contest.players[Global::GetLogicalRow(i)]->ProblemLabelAt(j)->State() == ' ') { judge_thread->AppendProblem(i, j + 2); board_table->item(i, j + 2)->setSelected(true); } } else if (column <= 1) // Judge one player's all problems { for (auto j : Global::g_contest.problem_order) board_table->item(row, j + 2)->setSelected(true); } else if (column > 1) // Judge one judge_thread->AppendProblem(row, column); QEventLoop* eventLoop = new QEventLoop(this); connect(judge_thread, &QThread::finished, eventLoop, &QEventLoop::quit); judge_thread->start(); eventLoop->exec(); delete eventLoop; delete judge_thread; UnlockTable(); board_table->horizontalHeader()->setSectionsMovable(true); board_table->setSelectionMode(QAbstractItemView::ExtendedSelection); if (Global::g_is_contest_closed) return; ui->action_configure->setEnabled(true); ui->action_set_list->setEnabled(true); ui->action_export->setEnabled(true); ui->action_refresh->setEnabled(true); ui->action_judge_selected->setEnabled(true); ui->action_judge_unjudged->setEnabled(true); ui->action_judge_all->setEnabled(true); ui->action_stop->setEnabled(false); this->activateWindow(); Global::g_contest.SaveResultCache(); }