如何在.NET上p/invoke clock\u gettime?

如何在.NET上p/invoke clock\u gettime?,.net,linux,f#,mono,pinvoke,.net,Linux,F#,Mono,Pinvoke,目前,我有这个F#代码来获得我能管理的最高分辨率、线性时间戳- /// The linux representation of time. type internal timeval = struct val tv_sec : int val tv_usec : int end /// Query the linux gettimeofday system call. [<DllImport("libc")>] extern

目前,我有这个F#代码来获得我能管理的最高分辨率、线性时间戳-

/// The linux representation of time.
type internal timeval =
    struct
        val tv_sec : int
        val tv_usec : int
        end

/// Query the linux gettimeofday system call.
[<DllImport("libc")>]
extern void private gettimeofday (timeval&, int64)

/// Get a time stamp at the highest-available resolution on linux.
let internal getTimeStampInternal () =
    let mutable t = timeval ()
    gettimeofday(&t, -1L);
    int64 t.tv_sec * 1000000L + int64 t.tv_usec
///时间的linux表示形式。
类型内部时间值=
结构
val电视节目组:国际
val tv_usec:int
结束
///查询linux gettimeofday系统调用。
[]
外部无效私有gettimeofday(timeval&,int64)
///在linux上以最高可用分辨率获取时间戳。
让内部getTimeStampInternal()=
设可变t=timeval()
gettimeofday(&t,-1L);
int64 t.tv\u秒*1000000ml+int64 t.tv\u秒
不幸的是,由于闰年和系统时间的变化,该值不是线性的

我已经读到,
CLOCK\u gettime
linux函数的
CLOCK\u MONOTONIC
变体将产生更线性、可能更高分辨率的结果(我希望这也适用于Mac)

问题是,虽然我做了一些谷歌搜索,但我找不到如何从.NET调用它,比如使用上面与gettimeofday一起使用的
[]
属性


我该怎么做呢?如果我不能用一个简单的DllImport来实现这一点,那该怎么做呢?

你想把DateTime转换成Linux时间吗?不,先生:)事实上,挂钟时间对于我真正想要实现的目标来说是完全无关紧要的。我只想用一种线性的、高分辨率的方法在linux上创建时间戳,这样我的游戏引擎最终就可以用一种跨平台的方法来观察过去事件(如实体创建)的发生顺序。@Bryan:System.Diagnostics.StopWatch有什么问题吗?不管怎样,我找到了。看起来Linux上的Mono确实通过Mono_100ns_ticks函数为Stopwatch.GetTimestamp使用了clock_gettime,这似乎已经足够了!请看这里的代码-@BryanEdds:它在Windows上的分辨率优于100ns,我不知道你从哪里得到的印象是它不。。。