Помогите пожалуйста(многопоточное приложение с+)

Статус: Offline
Реєстрація: 09.02.2008
Повідом.: 241
Помогите пожалуйста(многопоточное приложение с++)

Люди Дорогие, помогите непонимающему(((.знания сисемного программирования очень малы!
Есть такое задание(ниже описанно), вопросы : нужен пример хотябы первого шага......
какова будет структура программы??
послe Include(ов) будут функции потоков, в которых будут условия типа (если взлётная полоса занята, то самолёт стоит на временной стоянке) и подобные?? а в функции мэйн будут создаваться сами потоки??? сколько будет потоков?? кто может, напишите хоть маленький кусочек, дальше сам буду разбираться.. Всем огромное спасибо!

ВАРИАНТ 4

Разработать многопоточное приложение (в NT и Linux), которое моделирует
аэропорт.

Требования к модели:
1) моделирование проходит на промежутке времени T. Если промежуток
времени проходит - моделирование заканчивается.
2) в аэропорту есть одна взлетная полоса, которая может быть занята
одним самолетом (идущим на взлет или на посадку) случайное время в
диапазоне от 1 до r1 (или от r11 до r12)
3) в аэропорту есть n мест для стоянки.
4) первоначально в аэропорту самолетов нет - они начинают прилетать
через случайный промежуток времени от 1 до r2.
5) прилетающий самолет летает вокруг аэропорта, пока не освободится
взлетная полоса.
6) после того, как самолет сел, он перемещается на временную стоянку
для ожидания свободных мест для стоянки (или сразу едет на свое место,
если есть хотя бы одно свободное).
7) на месте для стоянки самолет проводит случайное время от 1 до r3
(или от r31 до r32), после чего идет на взлет, если взлетная полоса
свободна, а иначе ждет, пока она освободится. После взлета самолет
удаляется из системы.

Величины T,n,r1,r2 и r3 должны задаваться пользователем. Кроме этого,
должна быть возможность задать значения по умолчанию.

Рекомендации:
1) аэропорт и каждый самолет представляется потоком управления
2) места для стоянок представляются семафором
3) взлетная полоса представляется мьютексом
4) информация о каждом самолете должна сопровождаться его номером
5) (дополнительно) можно учитывать еще время заруливания на место для
стоянки и оттуда на взлетную полосу - случайная величина от 1 до r4.
 
Останнє редагування:
"Сисемное" программирование - да Вы, батенька, затейник :D

1. Задача к системному программированию не имеет никакого отношения
2. Идея представлять каждый самолет "потоком управления" а прочие объекты мьютексами/семафорами и прочим что мягко скажем притянута за уши, исключительно чтобы научить студиозусов межпоточному/межпроцессному взаимодействию и синхронизации.

Короче, студент, луркай на WaitForSingleObject()|WaitForMultipleObjects() и будет тебе счастье.
 
Короче, студент, луркай на WaitForSingleObject()|WaitForMultipleObjects() и будет тебе счастье.

а также _beginthreadex


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

будут конкретные вопросы пиши.... ато судя по теме вопрос похож на :
народ забацайте мне курсач :)
 
Косвиной привет.
Не хочет файл аттачиться, качай лабу
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
.
 
Останнє редагування:
Да, утечка памяти имеется. Вот тому
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
.

Почитай у Джеффри Рихтера про семафоры и вообще про синхронизацию потоков. Тогда станет ясно, как реализовывать. А так мы тебе напишем, а ты не разобравшись, сдашь курсовой. А таких задач в будущем будет очень и очень много. Ты что, каждый раз будешь на форуме просить сделать задание за тебя?
 
Судя по уровню гораздо проще СДК-шная CreatThread() не взирая на заботливо встроенный в нее мемори лик :D

from MSDN
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpsa,
DWORD cbStack,
LPTHREAD_START_ROUTINE lpStartAddr,
LPVOID lpvThreadParam,
DWORD fdwCreate,
LPDWORD lpIDThread
);

uintptr_t _beginthreadex(
void *security,
unsigned stack_size,
unsigned ( *start_address )( void * ),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);

у них сигнатуры одинаковы... чем CreateThread проще? или что-то другое имелось ввиду?


beginthread - проще...:)


uintptr_t _beginthread(
void( *start_address )( void * ),
unsigned stack_size,
void *arglist
);

но она не возвращает хендл потока...


так что, ТС, юзай _beginthreadex

а вообще если собераешся делать апликуху кросплатформеной, в чем я сомнивеюсь, не в обиду... то посмотри на boost там есть готовые решения кросплатформеных потоков ;)
 
Останнє редагування:
2. Идея представлять каждый самолет "потоком управления" а прочие объекты мьютексами/семафорами и прочим что мягко скажем притянута за уши, исключительно чтобы научить студиозусов межпоточному/межпроцессному взаимодействию и синхронизации.


почему?
долблесный сэр может представить более адекватные задачи на сисемное программрование?
 
для POSIX читай все что связано с pthread_*.
 
почему?
долблесный сэр может представить более адекватные задачи на сисемное программрование?
Доблестный сэр может предоставить более адекватное решение данной задачи без потоков/семафоров/мьютексов.
И еще раз - к "сисемному" программированию данная задача не имеет никакого отношения.
 
Доблестный сэр может предоставить более адекватное решение данной задачи без потоков/семафоров/мьютексов.

спасибо кэп

И еще раз - к "сисемному" программированию данная задача не имеет никакого отношения.

почему? долблесный сэр считает потоки/мьютексы/семафоры прикладным программированием?
 
долблесный сэр считает потоки/мьютексы/семафоры прикладным программированием?

конечно - это все объекты прикладного уровня, т.е. используемые в прикладных задачах.
Другое дело работать напрямую с контроллерами устройств, прямой ввод/вывод в порты, DMA, написание драйверов, модификация таблиц дескрипторов - это да, это уже системное программирование :)
 
Назад
Зверху Знизу