[英]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.