[英]Boost interprocess Win32, x64
我想使用 boost 進程間在不同平台之間進行通信。
我在 Windows 7 上使用 vc12 和 boost 1.58。
我下面的代碼是一個非常簡單的例子,應該可以工作。 但它不適用於不同平台之間的通信......
如果我在 x64 中創建 msm 並在 win32 中打開,則進程卡在 boost/int/sync/detail/common_algorithms.hpp 中的函數 try_based_lock 處
反過來:win32 創建,x64 打開:進程在 segment_manager_helper.hpp 中的 name_length 處崩潰,同時試圖在索引中查找名稱(segment_manager 中的 priv_generic_find)。
問題發生在 msm.find("Data")
#include <iostream>
#include <boost/interprocess/managed_shared_memory.hpp>
int main() {
namespace bip = boost::interprocess;
// open in WIN32, create in x64
#ifndef _WIN64
bip::managed_shared_memory msm(bip::open_only, "TestIPC");
#else
bip::shared_memory_object::remove("TestIPC");
bip::managed_shared_memory msm(bip::create_only, "TestIPC", 4096);
msm.construct<uint32_t>("Data")[1](10);
#endif
// Get Data and print it
auto data = msm.find<uint32_t>("Data");
if (data.second == 1) {
std::cout << *data.first << std::endl;
}
std::cin.ignore();
return 0;
}
有沒有人有這方面的經驗?
boost::interprocess
通信使用托管共享內存類的 32 位和 64 位模式似乎不支持或錯誤。 在較低的級別,雖然工作正常。 這是示例代碼:
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace boost::interprocess;
#ifndef _WIN64
shared_memory_object shm(open_only, "MySharedMemory", read_write);
mapped_region region(shm, read_only);
uint8_t *ptr = static_cast<uint8_t*>(region.get_address());
std::cout << int32_t(*ptr) << std::endl;
#else
shared_memory_object shm(create_only, "MySharedMemory", read_write);
shm.truncate(4096);
mapped_region region(shm, read_write);
uint8_t *ptr = static_cast<uint8_t*>(region.get_address());
*ptr = 5;
#endif
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.