Как я могу получить значки файлов в Windows асинхронно (и в идеале параллельно) из C ++? - PullRequest
0 голосов
/ 04 января 2011

Документация MSDN для SHGetFileInfo совершенно правильно говорит:

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

, поэтому я пытаюсь найти хороший способ сделать это, если у меня есть большой список (более 80) из них,и хотел бы распараллелить базовый ввод-вывод.Я мог бы использовать пул потоков, но я не опытный программист Windows, поэтому мне было интересно, есть ли лучший способ для этого.

Ответы [ 2 ]

1 голос
/ 04 января 2011

Создайте очередь имен файлов для обработки (достаточно связного списка; рассмотрим std :: list STL) Создайте блокировку для этой очереди (критический раздел подойдет). Создайте кучу потоков (2-4). Каждый поток получит блокировку, получит голову из очереди, снимет блокировку и получит значок - в цикле. Если в очереди больше нет элементов, поток завершается. Как то так.

0 голосов
/ 04 января 2011

Выполнение параллельных вызовов ввода / вывода может не дать вам никакого ускорения (вероятно, только накладные расходы).Вы можете поэкспериментировать с библиотекой GBL и посмотреть, поможет ли вам многопоточность.Напишите функции-обработчики для ответа на события.Затем вы можете легко переключаться между AsyncHandler, который использует пул потоков и Handler, который синхронен, чтобы увидеть, можете ли вы добиться какого-либо ускорения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...