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也可以正常工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |