Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526

Файл в памяти

20.10.2012, 17:56. Показов 1337. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пытаюсь синхронизировать несколько процессов. Написал вот такой код.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <Windows.h>
 
int main()
{
    HANDLE hMapObject = CreateFileMapping( 
                INVALID_HANDLE_VALUE,
                NULL,                
                PAGE_READWRITE,      
                0,                  
                sizeof (CRITICAL_SECTION),          
                _T("CS"));    
    CRITICAL_SECTION *c = (CRITICAL_SECTION *) MapViewOfFile( 
                hMapObject,    
                FILE_MAP_WRITE, 
                0,             
                0,            
                0);  
 
    if (!hMapObject)
    {
        std::cout << "Error" << std::endl;
    }
 
    if (GetLastError() != ERROR_ALREADY_EXISTS)
    {
        InitializeCriticalSection(c);
    }
    else
    {
        EnterCriticalSection(c);
        std::cout << "Hello" << std::endl;
        LeaveCriticalSection(c);
        DeleteCriticalSection(c);
    }
 
 
    std::system("pause");
    return 0;
}
Далее запускаю два раза .exe (и при втором запуске программа(второй процесс) "падает"). Я почти уверен, что это из-за того, что почему-то не во втором процессе не чувствуется инициализация критической секции, хотя она должна была, и я уверен, она инициализируется в первом процессе.

Добавлено через 7 минут
Могу сбросить весь проект, но там ничего больше нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2012, 17:56
Ответы с готовыми решениями:

Файл в памяти
итак, еще один каверзный вопрос, в памяти есть массив байт (array of byte), этот массив - есть файл картинки. Задача: нужно не используя...

Отправить файл из памяти
Всем здравствуйте. Моя программа качает из интернета файл, и он хранится временно в TMemoryStream. Далее данный файл мне нужно отрпавить...

Файл эксель в памяти
можно ли открыть файл xls не в виде отдельной книги, а в памяти? Так, чтобы с ним можно было бы работать, как и с обычной книгой? Ну хотя...

10
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
20.10.2012, 19:43
хм.. странный код..
используй Mutex
Пример http://msdn.microsoft.com/en-u... s.85).aspx
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
20.10.2012, 19:45  [ТС]
ISergey, Спасибо кончено, но я хочу разобраться с файлами в памяти и критическими секциями. Второй процесс падает на 31-ой строчке. Но я не могу понять почему? Что я делаю не так?
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
20.10.2012, 19:51
CRITICAL_SECTION вобще не предназначена для синхронизации между разными процессами.
Ее нужно использовать в контексте одного процесса для синхронизации потоков.
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
20.10.2012, 19:53  [ТС]
Цитата Сообщение от ISergey Посмотреть сообщение
CRITICAL_SECTION вобще не предназначена для синхронизации между разными процессами.
Согласен. Тогда, возможно ли синхронизация процессов с помощью CRITICAL_SECTION?
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
20.10.2012, 19:57
Цитата Сообщение от go Посмотреть сообщение
Согласен. Тогда, возможно ли синхронизация процессов с помощью CRITICAL_SECTION?
Мало вероятно..
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
20.10.2012, 20:00  [ТС]
Цитата Сообщение от ISergey Посмотреть сообщение
Мало вероятно..
А почему?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
20.10.2012, 20:14
А потому, что MSDN прямо указывает:
A critical section object provides synchronization similar to that provided by a mutex object, except that a critical section can be used only by the threads of a single process.
1
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
20.10.2012, 20:20
А почему?
http://blogs.msdn.com/b/larryo... 55741.aspx
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
23.10.2012, 11:12  [ТС]
Актуально. Что я делаю не так?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.11.2012, 23:00  [ТС]
Вопрос решен положительно. Разобрался. Программа валилась из-за того, что другой процесс пытался захватить крит. секцию. Если кому-то будет интересно, то можете обращаться в ЛС за подробностями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.11.2012, 23:00
Помогаю со студенческими работами здесь

Временный файл в памяти?
Всем доброго времени суток! У меня есть файл таблички Excel (template.xlsx), который хранится в ресурсах программы. Есть модуль для...

Как отослать файл из памяти
Здравствуйте! Может знает кто решение? Итак, получаю аудио файл: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,...

Выделение памяти под файл
Всем доброго времени суток. Написал некоторую структуру, работают все пунктики, все функции, но нашёлся недочёт. Если записывать в файл...

временный файл в оперативной памяти
Можно ли создать временный файл ! в оперативной памяти !, чтобы во время исполнения приложения в него шла запись, а после выполнения...

Скопировать файл из памяти на диск
Я использую инжекцию dll в чужой процесс и перехватываю функцию CreateFileA Далее мне нужно добавить свой обработчик,чтобы все файлы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru