Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: [wlx/wdx] TCMediaInfo 
Author Message
MVV



PostPosted: Sun Aug 22, 2010 16:24    Post subject: Reply with quote

Loopback wrote:
Правда, что касается базы, осталась одна проблема, которую пока не знаю, как решить. Если запущено две копии тотала и обе пытаются писать в один файл - будут проблемы. Хотя читать могут оба спокойно. Как корректно понять, что в данный момент в базу другим
ProgMan13 wrote:
процессом выполняется запись - неясно.

Мутексы в помощь. Перед запись создать мутекс, после - разрушить. Потом перед записью проверять наличие мутекса, например, секунд 10, если мутекс не разрушен - просто не записывать.

А по-моему, тут спокойно и без мутексов можно обойтись - сам файл отлично сыграет роль мутекса:

Если надо выполнить запись в базу, чтобы вторая копия не смогла одновременно записать в тот же файл, но могла читать в это время, открываем файл на запись с флагом одновременного доступа FILE_SHARE_READ и без флага FILE_SHARE_WRITE. А если нужно, чтобы вторая копия и читать файл не могла, пока первая пишет в него, открываем без флагов одновременного доступа. После записи, естественно, закрываем файл. При этом при попытке открыть файл из другой копии в доступе будет отказано - и можно будет те же 10 секунд выждать и попытаться еще раз. В функции CreateFile за одновременный доступ отвечает параметр dwShareMode. И, по идее, более высокоуровневые средства записи в файл тоже должны поддерживать нечто подобное.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
View user's profile Send private message ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group