0

如果我创建了一个 c++ 函数并将其编译为一个看起来像这样的 dll:

public pthread& NanoSleep(pthread& myThread)
{
    nanosleep(1);
    return myThread;
}

有没有办法在任何人都能想到的 ac# 类中使用它?传递线程真的有必要吗?我基本上想尝试让 ac# 线程休眠 1 纳秒。这样做没有真正的功能性理由。我只是想知道它是否可以完成:)

注意:如果 C++/CLI 处理好它,那真是太棒了。 http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes#A8

4

2 回答 2

0

在 Windows 上使用 c++/CLI应该允许您将 pthread 包装在托管类中(假设您称之为 Posix.NET.Thread)并使用它而不是.NET 中提供的 System.Threading.Thread。

我怀疑即使在您上面的 C/C++ 代码中,pthread 确实是下面的 Windows 线程,但我不知道那里。

在 Linux 上,您可以使用 Mono.NET,我很确定在 Linux 上实现 System.Threading.Thread 将是一个 pthread。这是 dtb 所暗示的,但也指的是其他问题。我无法验证这一点,但我会惊讶地发现。

如果您的目标实际上是获得亚毫秒级的时间分辨率,那么您无论如何都不想完全依赖线程睡眠调用(托管或 pthread)。

在 Windows 上,在 C++ 中有高分辨率计时器:http: //msdn.microsoft.com/en-us/library/aa964692%28v=vs.85%29.aspx

在 .NET(c#) 中,有一个 System.Diagnostics.Stopwatch 类包装了高分辨率计时器。

所以你可以让线程休眠,如果你需要等待>~30ms,然后轮询高分辨率计时器以获取高于~30ms的分辨率。

于 2014-06-20T14:18:11.393 回答
0

.NET 使用“托管线程”。在底层,这些是由特定于平台的线程实现的。例如,Windows 上的 Win32 线程。但是,托管线程和特定于平台的线程之间没有一对一的映射;托管线程可以在平台线程和处理器内核之间移动。我假设 Mono 在 Linux 上通过 pthreads 实现托管线程。但是,即使您确定了托管线程当前运行的 pthread,您也无法使用它来可靠地暂停托管线程。

于 2013-08-04T23:06:32.520 回答