【发布时间】:2014-10-27 13:17:40
【问题描述】:
我还没有找到能够适应我的问题的答案。
所以情况是这样的: 我需要测试 12 台网络摄像机的功能,它们都在做同样的工作。 所以,我正在启动 12 个线程,连接到摄像头。
每个线程都在发送激活命令,然后等待 10 秒等待响应,预计不会出现。
在这 10 秒之后,线程应该进入等待状态并通知主线程。
一旦所有 12 个线程都处于等待状态,就会通过串行连接发送命令,线程应该继续工作。现在他们应该会收到答复。
到目前为止,我已经启动了 12 个线程,但我不知道此时如何让它们同步。
有什么帮助吗?
到目前为止的代码:
Dictionary<String, Thread> tl = new Dictionary<String, Thread>();
Thread t;
foreach (String ip in this.ips) {
t = new Thread(new ParameterizedThreadStart(camWorker));
tl.Add(ip, t);
tl[ip].Start();
}
但如果需要,可以重建它以为每个线程创建单独的类实例。
【问题讨论】:
-
为了适应多线程你已经做了哪些工作?即一段代码?
-
更新了问题
-
您是在寻找一种方法来重新唤醒线程还是只是让它们保持同步?
-
我会简单地使用计数器。每次启动
Task时将其递增,激活完成时递减(如果需要结果,则为正或负结果 - 存储它)。一旦它是0,您就知道所有任务都已完成。见Interlocked.Increment。 -
只使用任务/异步方法,除非有真正的原因,否则不要打扰线程和同步原语(早期版本的 .NET 和与现有线程代码的一致性可能是坚持使用的两个主要原因线程)。
标签: c# multithreading