在我的应用程序中,我需要对一个相当大的数组进行排序,结果证明这是一个标准的任务,例如: std::sort
。
位于GUI应用程序中我想对排序的进度给出某种响应。我的第一次尝试是找出所需比较的大概数量(n*log2(n)
为std::sort
),然后在传递给std::sort
的比较算子中计算它们。这很有效。
排序算法在单独的线程中执行,以保持GUI响应。它使用Qt的信号或一些类似的线程安全机制将其进度传达给GUI。
但是,我也希望排序操作可以中断。也就是说,向用户提供按钮或类似的东西以中止整个操作。目前我只看到两个选项:
pthread_cancel
等)考虑到线程取消而不是最后的手段并且拒绝重写标准库算法,我会抓住狼的耳朵。
答案 0 :(得分:7)
让比较函数检查原子标志并在设置标志时抛出异常。排序线程应该捕获异常并干净地退出。然后GUI线程只需要设置标志。