在Windows窗体应用程序中,调用的影响Thread.Sleep(1)如下面的代码所示:
public Constructor()
{
Thread thread = new Thread(Task);
thread.IsBackground = true;
thread.Start();
}
private void Task()
{
while (true)
{
// do something
Thread.Sleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
这个线程会占用所有可用的CPU吗?
我可以使用哪些分析技术来测量此线程的CPU使用率(除了任务管理器)?
我想用不到1毫秒的时间调用线程休眠.我读到没有thread.Sleep也没有Windows-OS支持.
那是什么解决方案?
对于所有想知道我为什么需要这个的人:我正在进行压力测试,并想知道我的模块每秒可以处理多少消息.所以我的代码是:
// Set the relative part of Second hat will be allocated for each message
//For example: 5 messages - every message will get 200 miliseconds
var quantum = 1000 / numOfMessages;
for (var i = 0; i < numOfMessages; i++)
{
_bus.Publish(new MyMessage());
if (rate != 0)
Thread.Sleep(quantum);
}
Run Code Online (Sandbox Code Playgroud)
我很高兴得到你的意见.
我有一个方法,使用后台工作程序轮询DLL的状态,如下所示:
var timeout = DateTime.Now.AddSeconds(3);
while (System.Status != Status.Complete // our status is not complete
&& DateTime.Now < timeout // have not timed out
&& !_Worker.CancellationPending) // backgroundworker has not been canceled
{
//Thread.Yield();
//Thread.SpinWait(1);
//Thread.Sleep(1);
}
Run Code Online (Sandbox Code Playgroud)
当看着我的CPU%,yield()并spinwait()导致我的应用程序来拍摄高达50%,我的电脑上.随着Sleep(1)我的CPU%,6%,保持了下来.我被告知我应该选择Thread.Yield(),但是CPU%的高峰会让我感到困扰.什么是这样的最佳做法?
Thread.Sleep()分辨率从1到15.6ms不等
鉴于此控制台应用:
class Program
{
static void Main()
{
int outer = 100;
int inner = 100;
Stopwatch sw = new Stopwatch();
for (int j = 0; j < outer; j++)
{
int i;
sw.Restart();
for (i = 0; i < inner; i++)
Thread.Sleep(1);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为100个数字接近100.相反,我得到这样的东西:
99 99 99 100 99 99 99 106 106 99 99 99 100 100 99 99 99 99 101 99 99 99 99 99 99 99 99 99 99 99 …
我有一个2线程(现在)的应用程序,但似乎函数Thread.Sleep()不能很好地工作.它会占用线程,但需要花费更多的时间(例如 - 我想睡5分钟,睡眠时间为0.3秒或更长).这是代码:
int vlakien = 2;
Thread[] vlakna;
vlakna = new Thread[vlakien];
for (int i = 0; i < vlakien; i++)
{ try { vlakna[i] = new Thread(new ThreadStart(utok)); vlakna[i].Start(); } }
private void utok()
{
//some code
Thread.Sleep(5);
//some code
}
Run Code Online (Sandbox Code Playgroud)
此外,我试图在函数utok中使用秒表睡觉它也需要更多时间:
Stopwatch SW = new Stopwatch(); SW.Start();
while(SW.ElapsedMilliseconds < 5000) ;
Run Code Online (Sandbox Code Playgroud)
请帮忙.