首页 / C# / c# – 关于多线程的问题
c# – 关于多线程的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 关于多线程的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1920字,纯文字阅读大概需要3分钟。
内容图文
![c# – 关于多线程的问题](/upload/InfoBanner/zyjiaocheng/758/4ab262873585418287f524f8d409e9e2.jpg)
如果我有一个线程:
Thread sendMessage = new Thread(new ThreadStart(timer.Start()));
将,计时器的Tick事件将在主线程或sendMessage线程上?
编辑:
我有一个队列,我希望每x毫秒计时器将打勾,程序将队列中的数组出列,但这是我的代码:
Thread sendMessage = new Thread(new ThreadStart(startThreadTimer));
public Queue<Array> messageQueue = new Queue<Array>();
System.Threading.Timer timer;
private void startThreadTimer()
{
System.Threading.TimerCallback cb = new System.Threading.TimerCallback(checkIfQueue);
timer = new System.Threading.Timer(cb, null, 4000, 30);
}
private static void checkIfQueue(object obj)
{
}
我不能调用非静态方法或使用checkIfQueue中的非静态字段,它必须是静态的,我该怎么办?
编辑:
这是你们其中一个人发给我的代码,我认为他符合我的目标,它会起作用吗?
public ConcurrentQueue<Array> messageQueue = new ConcurrentQueue<Array>();
public void Example()
{
var thread = new Thread(
() =>
{
while (true)
{
Array array;
byte[] byteArray = {};
if (messageQueue.Count > 0)
{
messageQueue.TryDequeue(out array);
foreach (byte result in array)
{
byteArray[byteArray.Length] = result;
}
controllernp.Write(byteArray, 0, 100);
}
Thread.Sleep(30);
}
});
thread.IsBackground = true;
thread.Start();
}
解决方法:
如果您希望每隔X毫秒从队列中出列项目,那么为什么要使用计时器呢?生成一个围绕无限循环旋转的新线程要容易得多.
public class Example
{
private ConcurrentQueue<Array> m_Queue = new ConcurrentQueue<Array>();
public Example(int intervalMilliseconds)
{
var thread = new Thread(
() =>
{
while (true)
{
Array array;
while (m_Queue.TryDequeue(out array))
{
// Process the array here.
}
Thread.Sleep(intervalMilliseconds);
}
});
thread.IsBackground = true;
thread.Start();
}
public void Enqueue(Array array)
{
m_Queue.Enqueue(array);
}
}
更新:
不,您的方法不是线程安全的.问题在于你如何出列物品.
if (messageQueue.Count > 0)
{
messageQueue.TryDequeue(out array);
}
它应该看起来像这样.
if (messageQueue.TryDequeue(out array)
{
}
如果队列为空,则TryDequeue方法返回false,因此它已经在一次原子操作中进行检查和出列.
内容总结
以上是互联网集市为您收集整理的c# – 关于多线程的问题全部内容,希望文章能够帮你解决c# – 关于多线程的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。