На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Поиск файлов несколькими процессами через разделяемую память. , CreateFileMappingA, MapViewOfFile, WIN32_FIND_DATA, FindFirstFileA и FindNextFileA.
    1 Создаю структуру для поиска (WIN32_FIND_DATA) в разделяемой памяти.
    2 Запускаю несколько процессов, ищущих (FindNextFileA) через неё.
    3 Второе приложение, которое не в отладке, с сообщением останавливается при первом же вызове FindNextFileA, даже до следующего GetLastError не доходит. Из сообщениея "project.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства" никакой вывод сделать не удалось.
    Можно как-то выяснить причину остановки другого экземпляра процесса, который не отладке.
    Вообще можно поиск файлов вести из нескольких процессов в Windows XP 64?
      Цитата FateFlex @
      1 Создаю структуру для поиска (WIN32_FIND_DATA) в разделяемой памяти.

      Ну, так, видимо, в этом и проблема. Падает на совместном доступе к структуре.
        Цитата FateFlex @
        1 Создаю структуру для поиска (WIN32_FIND_DATA) в разделяемой памяти.
        2 Запускаю несколько процессов, ищущих (FindNextFileA) через неё.

        В чем смысл использования одной общей структуры несколькими процессами\потоками?!
        Если бы это был массив структур (хотя бы по одной на каждый процесс\поток, или логичнее - на каждый найденный файл), тогда - понятно.
          Похоже что нельзя поиск из нескольких процессов через одну WIN32_FIND_DATA вести, эта структура содержит не все данные поиска (например самой маски поиска в ней нет), поэтому вызов FindNextFileA из другого процесса выглядит так, как будто до него не вызывался FindFirstFileA (который инициализирует поиск/библиотеку).
            Цитата FateFlex @
            эта структура содержит не все данные поиска (например самой маски поиска в ней нет), поэтому вызов FindNextFileA из другого процесса выглядит так, как будто до него не вызывался FindFirstFileA (который инициализирует поиск/библиотеку).

            Разумеется, т.к. параметры поиска содержатся в хэндле hFindFile, возвращаемом функцией FindFirstFile.

            PS: Если ты собрался в разных процессах искать одни и те же файлы (в одной директории с одной маской), то это вообще не имеет смысла, т.к. FindFirstFile и FindNextFile это лишь обертки над супер-пупер нативной функцией Zw\NtQueryDirectoryFile, которая при первом вызове находит не один файл, а массив файлов (FileInformation) достаточно большого размера\длины (Length). Поэтому львиная доля времени уходит именно на вызов FindFirstFile для реального поиска файлов и заполнение буфера (а также на FindNextFile на Length+1 шаге, когда нужно загрузить новый буфер). А промежуточные вызовы FindNextFile в пределах текущего буфера найденных файлов выполняются очень быстро, поэтому разделять их на разные потоки, и тем более процессы, не имеет никакого смысла.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0220 ]   [ 17 queries used ]   [ Generated: 28.03.24, 14:50 GMT ]