可中断排序功能

时间:2017-01-07 17:39:53

标签: c++ qt sorting

在我的应用程序中,我需要对一个相当大的数组进行排序,结果证明这是一个标准的任务,例如: std::sort

位于GUI应用程序中我想对排序的进度给出某种响应。我的第一次尝试是找出所需比较的大概数量(n*log2(n)std::sort),然后在传递给std::sort的比较算子中计算它们。这很有效。

排序算法在单独的线程中执行,以保持GUI响应。它使用Qt的信号或一些类似的线程安全机制将其进度传达给GUI。

但是,我也希望排序操作可以中断。也就是说,向用户提供按钮或类似的东西以中止整个操作。目前我只看到两个选项:

  1. 抢先终止线程(pthread_cancel等)
  2. 重写排序算法并插入明确的取消点。
  3. 考虑到线程取消而不是最后的手段并且拒绝重写标准库算法,我会抓住狼的耳朵。

1 个答案:

答案 0 :(得分:7)

让比较函数检查原子标志并在设置标志时抛出异常。排序线程应该捕获异常并干净地退出。然后GUI线程只需要设置标志。