|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.05.2012, 16:00 | #1 |
Новичок
Джуниор
Регистрация: 26.05.2012
Сообщений: 2
|
Копирование файлов(тройная буферизация, потоки)
Задание выглядит так:
Разработать программу, реализующую копирование файлов при помощи тройной буферизации. Программа должна использовать потоки. Первый поток считывает блок данных из указанного файла. Второй поток записывает этот блок данных в файл. Буферизацию реализовать при помощи 2-х массивов состоящих из трех элементов. Каждый элемент - это буфер. Первый массив отвечает за чтение из файла, а второй за запись. Первый поток получает имя файла, берет пустой элемент из первого массива, записывает в него блок данных и передает второму массиву этот блок данных. При этом буфер, в который считали блок данных обнуляется. Второй поток, видя, что во втором массиве есть полный буфер, записывает этот буфер в файл и обнуляет его. При этом в первом массиве выделяется новый буфер. И так пока весь файл не будет скопирован. Реализовать на языке Паскаль, в среде Delphi. Долго тыкаюсь уже, ничего не выходит. Получилось сделать только однопоточное копирование с одним буфером. Помогите, пожалуйста! Последний раз редактировалось Belinos; 26.05.2012 в 17:02. |
26.05.2012, 21:26 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
походу, задание давал человек, который не имеет даже самого отдалённого понимания о межпоточной синхронизации данных.
Слегка непривычное использование семафоров, а так ничё сложного: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
26.05.2012, 22:11 | #3 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Боюсь, предложенный им способ реализации проигрывает простому однопоточному решению по всем без исключения параметрам: - по сложности реализации, - по надежности, - по ресурсоемкости, - по скорости работы. Кстати, по условию с файлами должны работать (в частности, открывать их) дополнительные потоки, а не основной. Последний раз редактировалось s-andriano; 26.05.2012 в 22:15. |
|
26.05.2012, 22:23 | #4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> проигрывает простому однопоточному решению по всем без исключения параметрам:
в общем да, потоки тут не пришей собаке хвост. Всё это делается через OVERLAPPED чтение/запись в несколько строк, и пусть система сама оптимизирует файловые операции, это у неё получится явно лучше, чем у нас. > по условию с файлами должны работать (в частности, открывать их) дополнительные потоки, а не основной. не заметил, ну, значит, надо передавать в поток не хэндл, а указатель на имя файла. Для себя я освежил в памяти работу с семафорами, а топикастер пусть уже сам разбирается с кодом и преподавателем )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
29.05.2012, 17:20 | #5 |
Новичок
Джуниор
Регистрация: 26.05.2012
Сообщений: 2
|
Спасибо большое! Покажу преподавателю =)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Буферизация файлов | PUSHkiN | C# (си шарп) | 3 | 24.04.2011 15:55 |
Потоки, передача файлов по сети | SeЯgey | Работа с сетью в Delphi | 3 | 02.04.2011 23:51 |
копирование строки из файла используя потоки | tim91 | Общие вопросы Delphi | 11 | 22.02.2011 19:03 |
Копирование файлов | ARXangel | Общие вопросы Delphi | 5 | 30.10.2008 12:29 |