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 クラスがあります。

そのため、最大 30 ミリ秒待機する必要がある場合はスレッドをスリープ状態にしてから、高解像度タイマーをポーリングして最大 30 ミリ秒を超える解像度を得ることができます。

于 2014-06-20T14:18:11.393 に答える