繁体   English   中英

Java和C#中的超时

[英]TimeOut in Java and C#

如果这是在Java中获取系统“超时”的方法,请执行以下操作:

timeoutMs = System.currentTimeMillis() + DataLog.getTimeout();
 try {
            dataLog.thread.join(DataLog.getTimeout());
        }
        catch (InterruptedException e) {}
        if (!dataLog.thread.interrupted()) {
            dataLog.thread.interrupt();
        }
        if (System.currentTimeMillis() > timeoutMs) {
            return ("Communication timeout");
        } else {
            return (dataLog.getResult());
        }
    }

以下代码是使用C#获取系统超时的好方法吗?

Stopwatch sw = new Stopwatch();
    sw.Start();
    while (true)
    {
        timeoutMs=DataLog.getTimeout();
     }

这只是一个大项目的一小部分,所以我不可能在输出中看到结果。请让我知道它是否正确!

提前致谢...

首先,如果这是您暂停线程的方式(例如,在一定时间内显示对话框),则这是一种非常糟糕的方式。

话虽如此,如果您使用的是Stopwatch ,则只需执行以下操作即可旋转CPU:

// start the stop 
var sw = Stopwatch.StartNew();
while (sw.ElapsedMilliseconds < 1000)
{
     /* do nothing */ 
}

而且,当然,您可以执行讨厌的Thread.Sleep调用以创建一个暂停:

Thread.Sleep(1000);

与C#中最接近的代码如下所示:

var timeoutMs = Environment.TickCount + DataLog.Timeout;

但是我很确定你做错了什么。

假设您想要当前时间(以毫秒为单位),然后从您的方法中添加超时,并假设返回值是毫秒:

var x = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
var timeout = DataLog.getTimeOut();
var timeoutMs = TimeSpan.FromMilliseconds(x).Add(TimeSpan.FromMilliseconds(timeout))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM