簡體   English   中英

如何為 c++ 的 sublime 構建系統添加超時(在 Windows 上)

[英]How to add timeout (on windows) for sublime build system for c++

我有這個構建系統,我想修改它,如果它需要超過 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"
}

由於sublime-build只是執行一個外部進程,一種方法是讓 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\""
}

target鍵告訴 Sublime 使用這個新命令而不是默認的exec命令,而cancel鍵告訴 Sublime 如果您嘗試手動取消構建(即從菜單、命令面板等),需要提供什么額外的 arguments。

該命令還實現了一個新的timeout構建參數,即構建將自行取消的時間(以秒為單位)。 如果超時時構建仍在運行,它將取消:

Start
[Timeout exceeded: 4.0]

省略timeout字段或將其值設置為0會禁用超時,在這種情況下,命令的行為與構建通常會完全相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM