Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在我的程序(基本任务管理器)中,我监视进程列表,并允许对进程进行更改(例如终止进程或提高其优先级)。
为了实现它,我将其设计如下:一个线程是完成所有工作的工作线程,一个线程正在更新 GUI 中的状态。有一个进程列表,我使用 lock 使其成为线程安全的。问题是我定期(比如 1 秒)扫描所有进程,同时我无法更改列表,因为另一个线程正在处理它。因此我的程序有时会延迟显示操作
这是一个好的设计吗?我能做些什么来改善它?我认为降低间隔值。
与其拥有一个共享列表,不如考虑拥有一个您的工作线程维护的列表,它是主列表。一旦完成扫描,它就会将主列表的副本传递给 GUI 线程。GUI 线程随后能够使用副本中包含的新信息更新 GUI,同时工作线程可以执行另一次扫描。
这消除了对锁的需求,因为工作线程只写入一个列表,然后创建一个副本(在同一个线程中)。
这种方法的一个问题是,如果后台工作人员能够以比 GUI 更新速度更快的速度收集新进程列表,会发生什么情况。您需要能够在它仍在处理先前的更新时处理接收新的进程列表。