相关疑难解决方法(0)

Thread.Sleep(1)在C#中有什么影响?

在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使用率(除了任务管理器)?

c# multithreading

29
推荐指数
4
解决办法
3万
查看次数

Thread.Sleep小于1毫秒

我想用不到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)

我很高兴得到你的意见.

.net c# multithreading

28
推荐指数
5
解决办法
4万
查看次数

Thread.Sleep或Thread.Yield

我有一个方法,使用后台工作程序轮询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%的高峰会让我感到困扰.什么是这样的最佳做法?

c# multithreading sleep yield

26
推荐指数
1
解决办法
2万
查看次数

我可以提高Thread.Sleep的分辨率吗?

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 …

.net thread-sleep

8
推荐指数
3
解决办法
3363
查看次数

使用Thread.Sleep短时间的问题

我有一个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)

请帮忙.

.net c# multithreading thread-sleep

5
推荐指数
2
解决办法
5536
查看次数

标签 统计

c# ×4

multithreading ×4

.net ×3

thread-sleep ×2

sleep ×1

yield ×1