我有一个程序,在按钮单击时,将创建一个新线程(如果它已经不存在)并建立与摄像机的连接。现在考虑相同的流程,但使用N个摄像头(因此在点击时创建N个线程)。再次单击该按钮后,将告知所有先前创建的线程停止执行(通过布尔标志),然后在每个线程上调用Join(500) - 结束所有线程。
现在,我注意到在短时间内执行的连续点击不仅会影响CPU使用率(8个线程正在运行时正常),而且即使在线程假定已经从该线程结束后也将该使用保持在相同级别致电加入(500)。
即使在线程加入后,可能导致CPU使用率仍然很高的原因是什么?
(注意:我也尝试过TPL的Task.WaitAll()实现并观察了相同的场景,所以我想说这不是因为线程不能以某种方式停止执行。)
编辑:
Thread[] m_threads = new Thread[8];
void Start()
{
for (int i = 0; i < m_threads.Length; i++)
{
m_threads[i] = new Thread(() =>
{
while (m_continue) { ... }
});
}
}
bool m_continue = false;
void Stop()
{
m_continue = false;
for (int i = 0; i < m_threads.Length; i++)
{
m_threads[i].Join(500);
}
}
首次点击时调用Start,下次点击时调用Stop。