![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
anatox91 |
|
||||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
всем привет
у меня в лабе стоит такая задача:
я вот набросал кое-что:
но программа вылетает то ли после создания процесса, то ли после первого выделения памяти... что тут не так? -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
видимо, надо захватить мьютекс, чтобы lab5_memsort.exe не успел это сделать первым (если он конечно это делает):
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
ээ спасибо, я как раз не мог понять для чего этот параметр)) но проблему вылета это не решило, вылетает где-то в районе вызова CreateProcess()
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
перед CreateProcess можно еще вставить GetStartupInfo( &si );
да и вообще, не хорошо передавать туда пустую структуру, там же указатели есть -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
да это вряд ли из-за этого, в другой программе у меня этот же участок кода нормально срабатывал, процессы создавались на ура
бывают проблемы разве что если передать NULL вместо этих структур, а так нормально) -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
если процесс создается, значит надо смотреть что он делает
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
lab5_memsort.exe
Это сообщение отредактировал(а) anatox91 - 12.10.2010, 14:12 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
SYNCHRONIZE тут недостаточно, лучше MUTEX_ALL_ACCESS, но это не суть,
+ надо еще проверить mapFile и shared_memory а вообще, поставь перед и после WaitForSingleObject MessageBox'ы: если процесс создается, то ему ломаться просто негде до WaitForSingleObject -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
||||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
сделал так:
lab5_memshare:
lab5_memsort:
выводит только один раз 123 и вылетает, то есть именно при создании процесса и видимо до Wait'а... сейчас еще попробую поэкспериментировать... Добавлено @ 16:39 вобщем вылетает именно на вызове CreateProcess(), процесс не создается, GetStartupInfo() тоже не помог... Это сообщение отредактировал(а) anatox91 - 12.10.2010, 16:39 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
||||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
помогло))) только я так и не понял в чем был прикол, ведь это тоже самое:
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
||||
|
|||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
но тут появилась еще одна проблемка: первый процесс(memshare) не ожидает пока второй отсортирует данные в памяти общего доступа и начинает их сразу выводить и в конце вылетает, т.е. синхронизация не работает, и я не могу понять что там не так... Если вот в этом участке кода после освобождения мьютекса добавить Sleep() на пару секунд, то второй процесс успевает отсортировать и все срабатывает нормально, но как это организовать с помощью мьютексов?
Добавлено через 2 минуты и 36 секунд нужно просто сделать чтобы первый процесс выполнил необходимые операции с памятью, потом подождал пока другой процесс эти данные отсортирует, и вывел их Добавлено через 3 минуты и 56 секунд а второй процесс должен ждать пока первый выделит память, потом отсортировать ее и все -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
дело не в TEXT, а в том, что в CreateProcess передавалась константа в качестве командной строки (у нас уже был такой случай, можно было поискать) завести второй мьютекс -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
||||||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
вот чуть подправил программки для двух мьютексов, но почему-то не срабатывает WaitForSingleObject() для второго мьютекса в первой программе, всегда вылетает окошко с ошибкой:
memshare
в этом месте
memsort
где я еще туплю?) Это сообщение отредактировал(а) anatox91 - 13.10.2010, 18:02 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
||||||
|
|||||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
нет гарантии, что на 52 строке memsort прошел 10, т.е. на 52 строке второй мьютекс может быть вообще еще не создан
самое простое: создать оба мьютекса в главной программе, она же по любому стартует первой + при открытии, надо захватить второй мьютекс в memsort, чтобы не было бесконечного Wait в 53 строке Добавлено через 8 минут и 58 секунд хотя, нет, это же мьютекс, в 53 строке он может быть только захвачен раньше, чем в memsort, значит это должен быть не мьютекс, а например событие, которое будет создаваться несигнальным, а сигнализироваться в memsort Добавлено через 11 минут и 20 секунд если это будет событие, то в memsort его нужно только открыть и заменить ReleaseMutex(mutex2) на SetEvent(mutex2) ну, mutex2 можно конечно переименовать, оно теперь event ![]() Это сообщение отредактировал(а) GremlinProg - 13.10.2010, 18:39 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
не, в задании сказано только через мьютексы сделать синхронизацию
Добавлено через 1 минуту и 34 секунды блин, можно ведь гораздо проще сделать, просто ожидать окончания процесса))) Добавлено через 1 минуту и 56 секунд и обойтись одним мьютексом) -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
![]() ![]() -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
все отлично работает, спасибо еще раз)
Добавлено через 32 секунды мьютекс нужен чтобы второй процесс подождал пока первый приготовит память -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ожидать освобождения мьютекса, захваченного в MemSort можно только при наличии гарантии того, что этот мьютекс будет захвачен не memshare, а сделать это может только MemSort т.е. если поменять местами программы, то такого эффекта можно добиться, т.е. не MemSort запускать из memshare, а наоборот ![]() либо можно использовать дополнительную синхронизацию событием для захвата мьютекса -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
там в вариантах заданий кроме мьютексов были еще бинарные и считающие семафоры(у меня попался мьютекс), с помощью них это можно было бы сделать без ожидания окончания процесса и без событий? если нет, то это наверно ошибка в задании...
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
без дополнительных синхронизаций, по-моему не реально (нельзя захватить мьютекс чужими руками, только своими),
а вот с одним барьером можно:
тогда m будет решать поставленную задачу -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |