c++ - 可中断排序函数

标签 c++ qt sorting

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

在 GUI 应用程序中,我想对排序的进度给出某种响应。我的第一个尝试是找出所需比较的大致数量(n*log2(n) for std::sort),然后简单地在传递的比较仿函数中计算它们到 std::sort。这非常有效。

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

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

  1. 抢先终止线程(pthread_cancel等)
  2. 重写排序算法并插入明确的取消点。

考虑将线程取消作为最后的手段并拒绝重写标准库算法,我正在小心翼翼。

最佳答案

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

关于c++ - 可中断排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524454/

相关文章:

bash - 区分大小写的排序 Unix Bash

sorting - 如何按键中的值对 Redis 哈希进行排序

javascript - 通过上下文查找 Array.sort 的方向

c++ - 在多个源文件中访问相同的类实例

c++ - Qt 从 GUI 线程停止工作线程循环

c++ - 旋转图像会导致 Qt 失真

c++ - QMenu:如何自定义QMenu的菜单项

c++ - Clang 找不到 `-fprebuilt-module-path` 的 C++ 模块

C++11 : Atomic variable : lock_free property : What does it mean?

c++ - 如何手动将选项插入 boost.Program_options?