mat*_*148 5 .net c# multithreading 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)
请帮忙.
15ms是Windows上的线程时间片(你实际上可以搞乱窗口并改变它......根本不推荐).事情可以让他们的时间提早,但任何事情都可能花费他们的全部时间.
所以真的很难比这更好,事实上,实际上20或30毫秒更有可能.我曾经做过实时处理,实时限制为50ms.如果你遵守某些规则(在C++中),这在Windows上运行良好
正如其他人所指出的,Sleep的默认分辨率是10或15毫秒,具体取决于Windows的版本.
但是,您可以通过发出一个来重新编程定时器以使用1毫秒的分辨率
timeBeginPeriod(1);
timeEndPeriod(1);
Run Code Online (Sandbox Code Playgroud)
哪里
[DllImport(WINMM)]
internal static extern uint timeBeginPeriod(uint period);
Run Code Online (Sandbox Code Playgroud)
我们在串行通信服务中执行此操作,其中能够准确地及时隔离发送是很重要的.有些人不愿意这样做,因为它会导致Windows更频繁地做其他基于计时器的事情.实际上,这对我们没有造成任何明显的问题,我们有数百个安装,每个安装都连接了数百个串行设备.
| 归档时间: |
|
| 查看次数: |
5536 次 |
| 最近记录: |