首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程编程

多线程编程
EN

Stack Overflow用户
提问于 2011-07-09 16:03:58
回答 2查看 311关注 0票数 0

我有个任务。我有一些随机数,其中包含这个数的值,并延迟。

延迟意味着,在这个延迟(以秒为单位)之后,这个数字将被更新(值和延迟)。

我需要做的就是下一步:例如我有5个数字。所有这些都在相同的表单上。当它到达最后一个时,它必须再次获得第一个数字,然后是第二个数字,依此类推。就像循环一样。

我是新手。有人能给我解释一下它是怎么工作的吗?

所以我有了main form,然后我有了5个UserControls (我将它们保存在List<>中)。每个控件都有UpdateNumber()方法,用于更新当前数字的值和延迟。我应该在主窗体上做什么?是否需要创建Thread[]数组?然后把每个UserControl都放进去?然后启动所有程序并以某种方式监视它们?

我想这是关于Thread.Join的。但对我来说,对于新手来说,这是相当复杂的。

另外,我还需要完成下一项任务。这是相同的,但所有这些数字都是不同的。例如,第一个数字在开始时有5秒的延迟。当它达到5秒的延迟时,它就会自我更新。Second number和所有其他数字都是这样做的。

EN

回答 2

Stack Overflow用户

发布于 2011-07-09 16:10:58

我会避免创建线程和使用Thread.Sleep()。创建每个线程都是一种昂贵的资源,而且由于它大部分时间都处于休眠状态,因此大部分时间都会被浪费。此外,当它执行时,它可能会导致上下文切换,因为CPU可能会饱和。

例如,您最初将Timer设置为对第一个值进行操作。在此操作完成后,您可以使用'delay‘来设置Timer,以执行将使用Timer.Change()读取下一个值的代码,依此类推。我不确定我是否完全理解您的需求,但听起来您应该能够使用Timer来满足大多数需求。Timer将使用ThreadPool,这将避免不必要的线程创建和上下文切换。

要了解更多关于多线程的知识,我强烈推荐Jeffrey Richter的书《通过C#的CLR》(第五部分)。多线程非常强大,但它很容易完全出错。我想任何想要写多线程代码的人在开始之前至少应该读一读像这样的好文章。

票数 2
EN

Stack Overflow用户

发布于 2011-07-10 10:31:41

仅根据我所读到的内容,我根本看不到使用线程的任何令人信服的理由。我的意思是,你只是根据某个时间间隔生成不同的随机数,所以它不可能是CPU密集型的。只需在每个UserControl中使用一个System.Windows.Forms.Timer即可。当执行Tick事件处理程序时,只需生成下一个数字。

如果您问在不同的线程中运行每个UserControl是不是一个好主意,那么答案肯定是否定的。包括FormControl在内的所有UI元素都必须在专门指定的UI线程中运行。这是强制性的。它在空闲线程上将无法正常工作(或根本不能正常工作)。

关于调用Thread.Join;不要尝试这样做,至少在UI线程上是这样的。在UI线程上调用Join将阻塞windows消息调度机制。它看起来像是整个UI挂起了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6633551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档