可中断排序功能

Kam*_*jii 4 c++ sorting qt

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

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

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

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

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

考虑到线程取消而不是最后的手段并拒绝重写标准库算法,我抓住了狼的耳朵.

Mar*_*ica 6

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