【发布时间】:2016-01-16 15:13:48
【问题描述】:
我正在为旅行商问题实施随机抽样/蒙特卡罗启发式算法。
我想执行最大的c 迭代,同时能够通过 Ctrl+C 或将SIGINT 发送到我的进程来停止搜索。
我知道之前有人问过这个问题(相关:Quitting node.js gracefully),但给定的解决方案对我不起作用。当我给 Ctrl+C 时,该过程不会退出,如果我杀死它,则不会执行最终代码。
我的代码:
var tsp = require("./Tsp.js");
var data = tsp.load("./input/it16862.tsp");
var starting_point = data.splice(10927, 1)[0];
var c = 0;
var cost = Number.POSITIVE_INFINITY;
var new_cost, solution, candidate_solution;
var interrupt = false;
var c = 0, interrupt = false;
process.on('SIGINT', function() {
interrupt = true;
});
while(c < 1000000000) {
if (interrupt) {
break;
}
candidate_solution = shuffle(data);
new_cost = tsp.cost(candidate_solution, starting_point);
if (new_cost < cost) {
cost = new_cost;
solution = candidate_solution;
console.log("Found a new better solution! %d", cost);
}
c++;
}
if (interrupt) {
console.log("Caught interrupt signal");
}
console.log("Examined %d solutions", c);
console.log("Best: %j", cost);
console.log("Solution written to: %s", tsp.write(solution, starting_point, cost));
我在Ubuntu 14.04.1,Nodejs 4.2.4。知道可能出了什么问题吗?
【问题讨论】:
-
好问题。 process.on('SIGINT' ... 正是我想要的。
标签: javascript node.js