2

通常は 1 分以内に実行される tcl スクリプトがあるとします。スクリプトの実行に 'x' 分 / 秒以上かかることがないようにするにはどうすればよいでしょうか。

たとえば、スクリプトに 100 秒以上かかった場合、制御を自動的にクリーンアップ機能に切り替えてスクリプトを適切に終了し、これまでのスクリプトのすべてのデータを実行できるようにする必要があります。時間がかかりすぎたり、無限に動けなくなったりしないこと。

これが tcl で実行できるかどうかはわかりません。ヘルプやポインタを歓迎します。

4

2 に答える 2

4

interp limitお子様通訳をご利用の際にご利用いただけます。

これにより、キャッシュ不能エラーがスローされることに注意してください。クリーンアップを行いたい場合は、親インタープリターの制限を削除してください。

set interp [interp create]
# initialize the interp
interp eval $interp {
     source somestuff.tcl
}
# Add the limit. From now you have 60 seconds or an error will be thrown
interp limit $interp time -seconds [clock seconds] -milliseconds 60000
set errorcode [catch {interp eval {DoExpensiveStuff}} res opts]
# remove the limit so you can cleanup the mess if needed.
interp limit $interp time -seconds {}
if {$errorcode} {
    # Do some cleanup here
}
# delete the interp, or reuse it?
interp delete $interp
# And what shall be done with the error? Throw it.
return -options $opt $res

リソース制限は Tcl での最善の策ですが、万能ではありません。Tcl は C プロシージャをアボートできません (アボートしません)。Tcl コアにハードワークを実行させる方法がいくつかあります。

于 2013-11-14T07:21:03.097 に答える