CString, Datetime и другие специальные поля в boost interprocess - PullRequest
0 голосов
/ 25 января 2019

в данный момент я пытаюсь настроить проект с поддержкой interprocess.Цель состоит в том, чтобы держать стол постоянным доступным.Таблица насчитывает около 30 строк Milion, и требуется много времени для импорта данных в каждую отдельную программу, которая нуждается в данных.

Данные, которые я хочу предоставить, взяты из базы данных MSSQL и имеют разные типы полей, такие как бит , int , nvarchar (5) или datetime .

В наших текущих программах мы импортируем nvarchar (5) как CString и datetime как TIMESTAMP_STRUCT.При настройке моего проекта я не смог найти способ поместить CString или TIMESTAMP_STRUCT в разделяемую память, потому что нет предоставленных контейнеров.

Ниже приведен минимальный пример:

#include <afxdb.h>
#include "stdafx.h"
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/containers/string.hpp>
#include <string>



using namespace boost::interprocess;

int main()
{
    //Teststruct to test shared memory
    struct Teststruct
    {
        int ID;
        string name;
        int Price;
    };

    //Testdata to test shared memory
    Teststruct Testdata;
    Testdata.ID = 1;
    Testdata.name = "NAME";
    Testdata.Price = 10;

    typedef allocator<Teststruct, managed_shared_memory::segment_manager>  SharedMemAllo;
    typedef vector<Teststruct, SharedMemAllo> MyVector;

    //delete SharedMem if already existing
    shared_memory_object::remove("MySharedMemory");
    //create SharedMem with given size
    managed_shared_memory segment(create_only, "MySharedMemory", 1000);

    const SharedMemAllo alloc_inst(segment.get_segment_manager());

    MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);


    for (int i = 0; i < 10; ++i)  //Insert data in the vector
    {
        Testdata.ID = i;
        myvector->push_back(Testdata);
    }

    return 0;
};

Я ищу возможность использовать struct Testdata2 (ниже) и хранить CStrings и TIMESTAMP_STRUCT в моей общей памяти.В этом случае нам не нужно менять все программы, которые работают с CString.

struct Teststruct_2
{
    int ID;
    CString name;
    int Price;
    TIMESTAMP_STRUCT date;
};

Знаете ли вы какой-нибудь способ решения этой проблемы?

С уважением

...