中国服务器网

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

Learn more

DLL内存pipe理器混合

我写了一个应用程序,允许人们贡献插件来扩展function。 这样的插件被部署为DLL文件,框架可以在运行时select。 每个插件都具有一个工厂函数,在应用程序的生命周期中多次调用该工厂函数来创build对象。 到目前为止,为了处理这些对象的所有权问题,我在返回的对象上使用了一个简单的计数共享指针,以便在最后一个引用被删除时被销毁。 然而,这往往会在Windows上触发崩溃,因为在插件DLL中新对象不是不太可能发生的,但是后来(由于在共享指针上调用了deref()调用)在主应用程序中被删除,并AFAIK this malloc / free mixup在Windows上是不可以的。 我目前的解决办法是让deref()不要调用'delete this'。 直接而是一个'释放();' 必须由插件实现的function,并调用“删除这个”。 然而,每个插件都必须实现这个微不足道的function是非常令人讨厌的 – 我为此提供了一个方便的macros插件作者必须使用的工作。 有人可能有其他的想法吗? 到目前为止,我的方法是所有由插件贡献的对象都被分配到插件中,并在那里被释放 – 当然,另一种方法是让所有内存在主应用程序中分配(通过提供一个类似malloc的函数的指针到他们可以根据需要调用的插件),并在那里发布。 这个问题是对插件作者来说不是那么方便,我想。 我对这个问题有任何其他观点感兴趣。 更新:我刚刚意识到,我可以重新实现运算符new和运算符删除插件返回的对象的基类,以便new'ing它们并删除它们将始终导致函数调用到同一模块(以便所有分配和免费都在插件或框架中完成)。

Windows兼容的文件系统的文件时间分辨率

我试图编写一个文件同步应用程序,可以在不同的Windows机器上使用任何兼容的文件系统通用。 我有一个要求,规范文件的时间戳之前,两台机器之间的同步到一个特定的粒度,以便在同步工作完成后,两个独立的机器上的文件似乎是时间戳相同的。 对于我的目的,我只需要规范化文件时间戳。 对于每个要同步的文件,我只需要规范化最后的写入时间和创build时间。 MSDN有这样的说FILETIME结构和它的解决scheme : 不是所有的文件系统都能logging创build和上次访问时间,并不是所有文件系统都以相同的方式logging它们。 例如,在NT FAT上,创build时间的分辨率为10毫秒,写入时间的分辨率为2秒,访问时间的分辨率为1天(实际上是访问date)。 在NTFS上,访问时间的分辨率为1小时。 因此, GetFileTime函数可能不会使用SetFileTime函数返回相同的文件时间信息集。 此外,FAT在本地时间在磁盘上logging时间。 但是,NTFS以UTClogging磁盘上的时间。 有关更多信息,请参阅文件时间。 根据维基百科 : Windows使用FAT,NTFS,exFAT,Live文件系统和ReFS文件系统(其中最后一个仅在Windows Server 2012中受支持和可用; Windows无法从其启动)。 换句话说,我的问题可以概括为: 在FAT,NTFS,exFAT,Live File System和ReFS的分组中, 在Windows中,哪一个文件的最后写入时间的分辨率最差? 在Windows中,哪一个文件创build时间的分辨率最差? 我已经尝试过search,但无法find这些不同Windows兼容文件系统之间的文件时间戳分辨率差异的详细信息。