Многопоточность: Клонирование директории в отдельном потоке.

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

The trick
Постоялец
Постоялец
 
Сообщения: 509
Зарегистрирован: 26.06.2010 (Сб) 23:08

Многопоточность: Клонирование директории в отдельном потоке.

Сообщение The trick » 12.09.2016 (Пн) 9:55

Нередко возникает необходимость копирования директории с ее структурой в другое место. Для этого идеально подходит метод FileSystemObject::CopyFolder, но во-первых он блокирует вызывающий поток до полного завершения, а также не имеет никаких интерфейсов для получения состояния процесса копирования. Для обхода первого ограничения достаточно всего-лишь вызвать метод в другом потоке, но второе ограничение уже никак не обойти (документированными способами).
В качестве пополнения примеров многопоточности для своего кирпича, я решил создать небольшое приложение позволяющее получать расширенную информацию во время копирования директории не блокирующее основной GUI поток. Для межпоточного обмена данными используется APC очередь, с помощью которой доставляется сообщение из потока копирования в главный поток. В качестве уведомления используется интерфейс ICopyFolderNotify, который реализуется необходимым объектом и получает уведомления из другого потока. Пример достаточно сложен, но содержит некоторые особенности работы с многопоточностью на VB6 (ручное копирование переменных между потоками).
Для работы нужно либо взять tlb отсюда, либо использовать DLL раскоментровав API vbCreateThread. Пример работает и в IDE и в скомпилированном виде (в IDE запуск в основном потоке).
Спасибо за внимание.
https://www.youtube.com/watch?v=85s420EJzYg
Вложения
Multithreading_CopyFolder.zip
(8.32 Кб) Скачиваний: 39
UA6527P

Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron