加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在多线程应用程序中使用Thread.Sleep的原因是什么?

发布时间:2020-12-15 23:58:17 所属栏目:百科 来源:网络整理
导读:很多时候,当我看到一些多线程代码时,我在代码中看到了Thread.Sleep()语句. 我甚至遇到了崩溃,我试图弄清楚问题所在,因此大部分多线程代码被注释掉并慢慢地将它带到最后一块,当我添加一个for语句时: for ( int i = 0; i 1000000; ++i ) ++i; 它并没有崩溃.所
很多时候,当我看到一些多线程代码时,我在代码中看到了Thread.Sleep()语句.

我甚至遇到了崩溃,我试图弄清楚问题所在,因此大部分多线程代码被注释掉并慢慢地将它带到最后一块,当我添加一个for语句时:

for ( int i = 0; i < 1000000; ++i )
    ++i;

它并没有崩溃.所以现在我将它替换为Thread.Sleep(),它似乎工作.我不能轻易地重新发布它在这里发布,但是使用多线程应用程序所需的Thread.Sleep()?

他们的目的是什么?如果不使用它会导致意想不到的结果吗?

编辑:顺便说一下,我正在使用BackgroundWorker,只在那里实现我的东西,但不知道是什么原因造成的.虽然我使用的API是托管应用程序,其中应用程序不是多线程的.所以例如我认为我不能同时在几个线程上调用它的API函数.不确定,但那是我的猜测.

解决方法

通常,Thread.Sleep是糟糕设计的标志.话虽这么说,它比吃100%的CPU核心时间要好得多,这就是上面的for循环所做的.

更好的选择通常是使用WaitHandle(例如ManualResetEvent)在发生“事件”(这是延迟的原因)时触发线程执行的继续.或者,在许多情况下,使用Timer也可以正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读