应用程序有一个辅助线程.这个线程不是一直在运行,但主进程可以经常调用它.
所以,我的问题是,在CPU性能方面哪个更优:在没有使用时挂起线程还是保持活动并使用WaitForSingleObject函数来等待来自主进程的信号?
就所使用的CPU资源而言,两个解决方案都是相同的 - 挂起的线程和在WaitForSingleObject中等待未发出信号的对象的线程都根本没有CPU周期.
也就是说,WaitForSingleObject几乎总是一个首选的解决方案,因为使用它的代码将更加"自然" - 更容易阅读,更容易正确.挂起/恢复线程可能是危险的,因为你需要非常小心,以确保你知道你暂停一个线程处于暂停它不会造成伤害的状态(想象暂停一个当前持有互斥锁的线程).
我认为Andrei不会使用Delphi来编写.NET,因此Suspend不会转换为System.Threading.Thread.Suspend而是转换为SuspendThread Win32 API.
我强烈建议不要这样做.如果您在任意时刻暂停该线程,那么您不知道将发生什么(例如,您可能在某种状态下暂停该线程,某些共享资源被阻止).如果您已经知道线程处于可挂起状态,那么只需使用WaitForSingleObject(或任何其他WaitFor调用) - 它将与挂起线程一样有效,即线程将使用零CPU时间直到它被唤醒.