在我的应用程序中,我需要对一个相当大的数组进行排序,使用例如
为了保持GUI的响应性,排序算法在单独的线程中执行。它使用Qt的信号或某些类似的线程安全机制将其进度通知GUI。
但是,我也希望可以中断排序操作。也就是说,用户可以提供一个按钮或类似的东西来终止整个操作。目前我只看到两种选择:
1. 预先终止线程(例如
考虑到线程取消应该作为最后的手段,并拒绝重写标准库算法,我正在控制局面。
std::sort
是标准的任务。由于该应用程序位于GUI中,我想在排序过程中提供一些响应。我的第一次尝试是确定所需的比较数量的近似值(对于std::sort
为n*log2(n)
),然后在传递给std::sort
的比较函数中简单地计数。这个方法非常有效。为了保持GUI的响应性,排序算法在单独的线程中执行。它使用Qt的信号或某些类似的线程安全机制将其进度通知GUI。
但是,我也希望可以中断排序操作。也就是说,用户可以提供一个按钮或类似的东西来终止整个操作。目前我只看到两种选择:
1. 预先终止线程(例如
pthread_cancel
)。
2. 重写排序算法并插入显式取消点。考虑到线程取消应该作为最后的手段,并拒绝重写标准库算法,我正在控制局面。
std::async
和async
launch policy,如果被中止,就不要使用结果,您觉得如何? - Some programmer dude