我的要求是单个数据帧将由两个并行方法处理(它们需要并行,因为它们对计算要求很高)。
根据任一线程的结果,另一个需要停止。 也就是说,如果方法1首先返回TRUE,则应停止方法2。 如果方法1首先返回FALSE,则不应停止方法2。
同样,如果方法2首先返回TRUE,则应停止方法1。 如果方法2首先返回FALSE,则不应停止方法1。
请注意,方法1和方法2是库调用(黑盒子),我无权访问其内部。我所知道的是,它们的计算量很大。 如何在C ++ / Windows中实现它?有什么建议?
答案 0 :(得分:1)
看一下并发运行时
特别是任务命名空间(http://msdn.microsoft.com/en-us/library/dd492427.aspx)和 when_any 功能(http://msdn.microsoft.com/en-us/library/hh749973.aspx)。
concurrency :: when_any 将创建一个任务,在任何输入任务完成时完成。
答案 1 :(得分:0)
无论您使用plain Windows threads,std::thread
,Task Parallelism,还是您喜欢的任何图书馆,根据您提供的详细信息,您仍然无法达到您想要的效果在你的问题中。
虽然您可以确定第一个线程/任务何时完成(例如@ j-w'答案),但您无法在不告诉您的&#的情况下真正停止其他任务 34;黑盒库功能"停止(除非它提供明确提前取消的方法)。你没有说明黑盒功能可以告诉中途取消,所以我假设它不是。
你不能简单地杀死线程/任务,因为这会造成资源泄漏,甚至可能产生其他令人讨厌的东西,例如dealocks等,这取决于你的blackbox功能。
所以,你可以使用类似when_any
或其他同步/信令原语的东西,让其他线程/任务继续运行,即使你不需要结果,&#34 ;未黑箱"你的图书馆功能和添加取消支持,或完全忘记它。