// test...
// Lock with mutex
void Lock() { ::WaitForSingleObject(m_hMutex, INFINITE); };
// Unlock with mutex
void Unlock() { ::ReleaseMutex(m_hMutex);
void TCNOptions::AddString(String& s)
{
//TODO: Add your source code here
int size=STRING_PAGE_SIZE;
char* pStrings = (char*)(m_pCNOptions + sizeof(CNOptions));
Lock();
m_pLastQuery->Text = pStrings;
size = m_pLastQuery->Text.Length() + s.Length() + 1;
while(size >= STRING_PAGE_SIZE)
{
m_pLastQuery->Delete(0);
size = m_pLastQuery->Text.Length() + s.Length() + 1;
}
m_pLastQuery->Add(s);
wsprintf(pStrings, "%s", m_pLastQuery->Text.c_str());
Unlock();
}
Строки в разделяемой памяти
Возникла необходимость поработать со списком строк. Список строк д.б. разделяемым N-м кол-вом потоков и процессов. Ясно, что нужно мапить поименованный файл + использовать событие со сбросом вручную или мьютекс (достаточно эксклюзивного доступа, хотя в идеале можно - один писатель и много читателей). Далее начинаются вопросы:
1. Как работать со строками? Т.е. как организовать их размещение в памяти, чтобы было удобно работать и производительность была на уровне. Есть такая идея (не очень умная наверно) - в классе завести TStringList и при каждом обращении лочить мап-файл, считывать туда список строк, выполнять операцию через StringList и катать обратно. Например вставка строки:
Код:
какие есть еще варианты по размещению строк в памяти, быстрого доступа и т.п.
2. Как ресайзить буфер?
Тут вообще хз, что думать... Или задавать фиксированный размер (не в тему:)) мап-файла или как его ресайзить когда он заполнится? М.б. держать список из хендлов мап-файлов и при необходимости открывать новые файлы, но это как-то хитро вы^%$# получается?
Вообщем жду Ваших предложений, может кто даст ссылку или приведе пример похожего класса. Спасибо!
Цитата:
2. Как ресайзить буфер?
Можно так:
Код:
Buffer = (TBuffer_Type*) realloc (Buffer, NewSize);
Иных способов не ведаю ;)
Цитата: el scorpio
Можно так:
Иных способов не ведаю ;)
Код:
Buffer = (TBuffer_Type*) realloc (Buffer, NewSize);
Иных способов не ведаю ;)
Это для "кучи", а я говорю про - файл проецируемый в память. Как его ресайзить?