boost通過WMI獲取時間有問題

2021-08-14 08:46:35 字數 634 閱讀 5258

使用boost的時候。原始碼檢視後發現boost程序通訊中使用命名佇列。boost會建立乙個boost_interprocess的目錄並且根據磁碟啟動時間建立乙個子目錄並且建立乙個命名檔案。問題就出現這個啟動時間裡。在啟動量一萬+以上的情況下。有2-3百個崩潰出現在這裡。

inline bool shared_memory_object::priv_open_or_create

(ipcdetail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm)

switch(type)

}//check for error

if(m_handle == ipcdetail::invalid_file())

m_mode = mode;

return true;

}原因:主程序在boost_interprocess下根據磁碟時間戳建立目錄並建立檔案,子程序開啟檔案失敗從而boost丟擲異常,內部原因是boost通過wmi獲取的時間變化了,導致開啟檔案的路徑與建立檔案路徑不一致,從而開啟檔案失敗。

測試:當我改變了系統時間的時候,再次執行程式。發現建立檔案的目錄是舊路徑(舊時間戳),開啟檔案的目錄是新路徑(新的時間戳)

通過WMI獲取主機板資訊

using system using system.collections.generic using system.text using system.management namespace cs 列印主機板資訊 private static void printmotherboardinfo ...

PowerShell 通過 WMI 獲取系統服務

通過 win32 service 可以獲取系統啟動的服務 get wmiobject win32 service format list caption,state 執行 caption mobile device service state running caption ipod 服務 stat...

C 中通過wmi獲取硬體的資訊

1 簡介 通過c 可以很簡易的得到計算機硬體的資訊。具體步驟如下 1 新增名為system.management的dll。具體方法為 解決方案 新增引用 net system.management。2 在原始檔中新增命名空間using system.management。3 建立management...