Как добавить время ожидания (на windows) для системы возвышенной сборки для C ++ - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть эта система сборки, и я хочу изменить ее так, чтобы она автоматически убивала процесс, если он занимает более 10 секунд, как я могу это сделать?

{
    "cmd": ["g++.exe","-std=c++17", "${file}", "-o", "${file_base_name}.exe", "&&" , "${file_base_name}.exe"],
    "shell":true,
    "working_dir":"$file_path",
    "selector":"source.cpp"
}

1 Ответ

0 голосов
/ 30 апреля 2020

Поскольку sublime-build просто выполняет внешний процесс, один из способов сделать это - заставить сборку выполнить внешний инструмент (или файл сценария или пакетного файла и т. Д. c), который отслеживает время и убивает себя .

Второй способ сделать это из Sublime - использовать пользовательскую цель сборки. Это команда, предоставляемая через плагин, который вы указываете Sublime использовать вместо команды, которую он обычно использует для выполнения сборки.

Ниже приведен пример плагина, который делает что-то вроде этого. Посмотрите это видео на , как использовать плагины , если вы не знакомы с использованием пользовательского плагина в Sublime:

import sublime
import sublime_plugin

from Default.exec import ExecCommand


class TimeoutExecCommand(ExecCommand):
    """
    Drop in replacement for the exec command in Sublime Text build 3210/3211.
    """
    def run(self, **kwargs):
        self.timeout = kwargs.pop("timeout", 0)

        super().run(**kwargs)

        if self.timeout:
            sublime.set_timeout(self.time_out_build, self.timeout * 1000)

    def time_out_build(self):
        if self.proc:
            self.append_string(self.proc, "[Timeout exceeded: %.1f]" % self.timeout)
            self.proc.kill()
            self.proc = None

. В нем реализована новая команда timeout_exec, которая может использоваться в сборках. иметь их время ожидания, если они не завершены в течение определенного c периода времени. Как отмечено в комментарии, требуется одна из более поздних сборок Sublime Text 3 (она не будет работать в сборках 4xxx, поскольку в этих сборках имеется расширенная команда exec).

Чтобы использовать это, вам необходимо добавьте несколько дополнительных ключей в ваш файл sublime-build. Пример файла сборки, который использует это:

{
    "target": "timeout_exec",
    "cancel": {"kill": true},

    "timeout": 4,

    "shell_cmd": "echo \"Start\" && sleep 10 && echo \"Done\""
}

Клавиша target говорит Sublime использовать эту новую команду вместо команды по умолчанию exec, а клавиша cancel сообщает Sublime, какие дополнительные аргументы для предоставления, если вы пытаетесь отменить сборку вручную (то есть из меню, палитры команд и т. д. c).

Команда также реализует новый параметр сборки timeout, то есть время в секундах. после чего сборка отменит сама. Если сборка все еще выполняется при достижении тайм-аута, она отменит:

Start
[Timeout exceeded: 4.0]

Если оставить поле timeout или установить его значение на 0, отключится тайм-аут, и в этом случае команда ведет себя точно так же, как обычно.

...