如何为c++的sublime构建系统添加超时功能(在windows上)?

问题描述 投票:0回答:1

我有这个构建系统,我想修改它,让它超过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"
}
c++ windows cmd g++ sublimetext3
1个回答
0
投票

由于一个 sublime-build 只是在执行一个外部进程,一种方法是让构建执行一个外部工具(或脚本或批处理文件等),它可以跟踪时间,并自行关闭。

第二种方法是在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 命令,如果在特定时间内没有完成,可以在构建中使用该命令让它们超时。正如评论中所提到的,需要一个最新的 Sublime Text 3 版本(它在 4xxx 版本中不起作用,因为那些版本有一个增强的 exec 命令)。)

要使用这个命令,你需要在你的 sublime-build 文件。使用这个文件的一个例子是。

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

    "timeout": 4,

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

The target 键告诉Sublime使用这个新命令,而不是默认的 exec 命令和 cancel 键告诉Sublime,如果你试图手动取消构建(例如从菜单、命令调色板等),要提供哪些额外的参数。

命令还实现了一个新的构建参数,即 timeout 是指在超时后,构建将自行取消的时间(秒)。如果超时时,构建仍在运行,则会自动取消。

Start
[Timeout exceeded: 4.0]

撇开 timeout 字段或将其值设置为 0 禁用超时,在这种情况下,该命令的行为与正常情况下的构建完全相同。

© www.soinside.com 2019 - 2024. All rights reserved.