我这里有一个按钮的点击,一个新的线程将被创建(如果不存在的话),并建立了一个摄像头的连接的程序。 现在考虑这个同样的流程,但随着摄像机N个(从而对点击创建N个线程)。 按钮再次点击后,所有先前创建的线程被告知要停止执行(通过布尔标志),然后加入(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);
}
}
开始被称为第一点击,同时停止被称为按第二下。