Skip to content

Commit da63387

Browse files
committed
feat: maximum judgeing threads can be changed now
1 parent 3041e14 commit da63387

15 files changed

Lines changed: 513 additions & 314 deletions

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,14 @@ if(LEMON_QT6)
4747
set(LEMON_QT_LIBNAME Qt6)
4848
set(QT_MAJOR_VERSION 6)
4949
set(QT_DEFAULT_MAJOR_VERSION 6)
50+
set(Qt_DIR ${Qt6_DIR})
5051
add_definitions(-DLEMON_QT6)
5152
else()
5253
set(LEMON_QT_MAJOR_VERSION 5)
5354
set(LEMON_QT_MINOR_VERSION 15)
5455
set(LEMON_QT_LIBNAME Qt5)
5556
set(QT_MAJOR_VERSION 5)
57+
set(Qt_DIR ${Qt5_DIR})
5658
endif()
5759

5860
add_definitions(-DQT_NO_FOREACH)
@@ -182,7 +184,7 @@ endif()
182184

183185
# Qt language translations
184186
add_custom_target(lupdate
185-
COMMAND lupdate
187+
COMMAND ${Qt_DIR}/../../../bin/lupdate
186188
${LEMON_BASE_HEADERS}
187189
${LEMON_BASE_SOURCES}
188190
${LEMON_CORE_SOURCES}

makespec/BUILDVERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
181
1+
182

src/base/LemonConfig.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ namespace Lemon::base::config {
2020
READ_JSON(json, specialJudgeTimeLimit);
2121
READ_JSON(json, fileSizeLimit);
2222
READ_JSON(json, rejudgeTimes);
23+
READ_JSON(json, maxJudgingThreads);
2324

2425
READ_JSON(json, defaultInputFileExtension);
2526
READ_JSON(json, defaultOutputFileExtension);
@@ -54,6 +55,7 @@ namespace Lemon::base::config {
5455
WRITE_JSON(json, specialJudgeTimeLimit);
5556
WRITE_JSON(json, fileSizeLimit);
5657
WRITE_JSON(json, rejudgeTimes);
58+
WRITE_JSON(json, maxJudgingThreads);
5759

5860
WRITE_JSON(json, defaultInputFileExtension);
5961
WRITE_JSON(json, defaultOutputFileExtension);

src/base/LemonConfig.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace Lemon::base::config {
2626
int specialJudgeTimeLimit{};
2727
int fileSizeLimit{};
2828
int rejudgeTimes{};
29+
int maxJudgingThreads{};
2930
QString defaultInputFileExtension;
3031
QString defaultOutputFileExtension;
3132
QStringList inputFileExtensions;

src/base/settings.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ auto Settings::getFileSizeLimit() const -> int { return fileSizeLimit; }
113113

114114
auto Settings::getRejudgeTimes() const -> int { return rejudgeTimes; }
115115

116+
auto Settings::getMaxJudgingThreads() const -> int { return maxJudgingThreads; }
117+
116118
auto Settings::getDefaultExtraTimeRatio() const -> double { return defaultExtraTimeRatio; }
117119

118120
auto Settings::getDefaultInputFileExtension() const -> const QString & { return defaultInputFileExtension; }
@@ -176,6 +178,11 @@ void Settings::setRejudgeTimes(int number) {
176178
DEBUG("Set Rejudge Times to " + QString::number(number));
177179
}
178180

181+
void Settings::setMaxJudgingThreads(int number) {
182+
maxJudgingThreads = number;
183+
DEBUG("Set Max Judging Threads to " + QString::number(number));
184+
}
185+
179186
void Settings::setDefaultInputFileExtension(const QString &extension) {
180187
defaultInputFileExtension = extension;
181188
DEBUG("Set Default InputFile Extension to " + extension);
@@ -361,6 +368,7 @@ void Settings::copyFrom(Settings *other) {
361368
setSpecialJudgeTimeLimit(other->getSpecialJudgeTimeLimit());
362369
setFileSizeLimit(other->getFileSizeLimit());
363370
setRejudgeTimes(other->getRejudgeTimes());
371+
setMaxJudgingThreads(other->getMaxJudgingThreads());
364372
setDefaultInputFileExtension(other->getDefaultInputFileExtension());
365373
setDefaultOutputFileExtension(other->getDefaultOutputFileExtension());
366374
setInputFileExtensions(other->getInputFileExtensions().join(";"));
@@ -409,6 +417,7 @@ void Settings::saveSettings() {
409417
settings.setValue("SpecialJudgeTimeLimit", specialJudgeTimeLimit);
410418
settings.setValue("FileSizeLimit", fileSizeLimit);
411419
settings.setValue("MaximumRejudgeTimes", rejudgeTimes);
420+
settings.setValue("MaximumJudgingThreads", maxJudgingThreads);
412421
settings.setValue("DefaultInputFileExtension", defaultInputFileExtension);
413422
settings.setValue("DefaultOutputFileExtension", defaultOutputFileExtension);
414423
settings.setValue("InputFileExtensions", inputFileExtensions);
@@ -512,6 +521,7 @@ void Settings::loadSettings() {
512521
specialJudgeTimeLimit = settings.value("SpecialJudgeTimeLimit", 10000).toInt();
513522
fileSizeLimit = settings.value("FileSizeLimit", 50).toInt();
514523
rejudgeTimes = settings.value("MaximumRejudgeTimes", 1).toInt();
524+
maxJudgingThreads = settings.value("MaximumJudgingThreads", 1).toInt();
515525
defaultInputFileExtension = settings.value("DefaultInputFileExtension", "in").toString();
516526
defaultOutputFileExtension = settings.value("DefaultOuputFileExtension", "out").toString();
517527
inputFileExtensions = settings.value("InputFileExtensions", QStringList() << "in").toStringList();

src/base/settings.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class Settings {
7878
int getSpecialJudgeTimeLimit() const;
7979
int getFileSizeLimit() const;
8080
int getRejudgeTimes() const;
81+
int getMaxJudgingThreads() const;
8182
double getDefaultExtraTimeRatio() const;
8283
const QString &getDefaultInputFileExtension() const;
8384
const QString &getDefaultOutputFileExtension() const;
@@ -98,6 +99,7 @@ class Settings {
9899
void setSpecialJudgeTimeLimit(int);
99100
void setFileSizeLimit(int);
100101
void setRejudgeTimes(int);
102+
void setMaxJudgingThreads(int);
101103
void setDefaultInputFileExtension(const QString &);
102104
void setDefaultOutputFileExtension(const QString &);
103105
void setInputFileExtensions(const QString &);
@@ -146,6 +148,7 @@ class Settings {
146148
int specialJudgeTimeLimit{};
147149
int fileSizeLimit{};
148150
int rejudgeTimes{};
151+
int maxJudgingThreads{};
149152
double defaultExtraTimeRatio{};
150153
QString defaultInputFileExtension;
151154
QString defaultOutputFileExtension;

src/core/contest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ void Contest::judge(const QVector<std::pair<Contestant *, int>> &judgingTasks) {
171171
stopJudging = false;
172172
// emit contestantJudgingStart(contestant->getContestantName());
173173

174-
controller = new JudgingController();
174+
controller = new JudgingController(settings);
175175

176176
// connect(controller, &JudgingController::judgeFinished, this, &Contest::judgeFinished);
177177
for (auto [contestant, i] : judgingTasks) {

src/core/judgingcontroller.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
#include "judgingcontroller.h"
99
#include "core/contestant.h"
1010

11+
#include <QtMath>
12+
1113
#define LEMON_MODULE_NAME "JudgingController"
1214

13-
JudgingController::JudgingController(QObject *parent) : QObject(parent) {
15+
JudgingController::JudgingController(Settings *settings, QObject *parent) : QObject(parent) {
1416
isJudging = 0;
15-
maxThreads = 8;
17+
maxThreads = qMax(1, settings->getMaxJudgingThreads());
1618
}
1719

1820
void JudgingController::assign() {
@@ -70,4 +72,4 @@ void JudgingController::stop() {
7072
}
7173
emit judgeFinished();
7274
}
73-
void JudgingController::addTask(TaskJudger *taskJudger) { queuingTasks.push_back(taskJudger); }
75+
void JudgingController::addTask(TaskJudger *taskJudger) { queuingTasks.push_back(taskJudger); }

src/core/judgingcontroller.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#pragma once
88

99
#include "base/LemonType.hpp"
10+
#include "base/settings.h"
1011
#include "taskjudger.h"
1112

1213
#include <QMap>
@@ -19,7 +20,7 @@ class JudgingController : public QObject {
1920
Q_OBJECT
2021

2122
public:
22-
explicit JudgingController(QObject *parent = nullptr);
23+
explicit JudgingController(Settings *settings, QObject *parent = nullptr);
2324
void addTask(TaskJudger *judger);
2425

2526
private:

0 commit comments

Comments
 (0)