Товарищи знатоки, объясните каким образом проводник ищет строку по файлам? Цель вопроса - написать нечто свое работающее по этому принципу. Возможно он использует какой-то COM для этого ? Вообще от чего оттолкнуться и куда копать ?
Это в один поток Код (Text): repe cmpsb ;_fiss_string1,_fiss_string2 jcxz _fiss_equal ;ecx=0, то есть строки совпадают jne _fiss_not_match ;если не равны - переход на not_match Это в восемь Код (Text): movq mm0, [edi + ecx * 8] ; тут строка №1 movq mm1, [esi + ecx * 8] ; тут строка №2 pcmpeqd mm0, mm1 ; сравнение сразу 8 байт movd eax, mm0 test al, al jz stp ; если 0 - строки различны Есть служба индексации, которая все слова упорядочивает. Эти алгоритмы отдельная песня. Быстродействие поиска увеличивается. Если часто не менять файлы
Корневая папка поиска->рекурсивно создаются треды для поиска во вложенных папках->найденные файлы также запускаются в отдельных тредах, которые открывают их и шмонают кусочками на наличие строки. Тредов N-ое количество. Можно так я считаю.
Тогда при поиске будет создаваться несколько сотен тысяч нитей (обычное количество файлов на диске). Это плохо. Лучше уж просто сделать рекурсивную функцию вроде такой: Код (Text): Функция Поиск(Папка, Строка) Пока ВПапкеЕстьЕщёФайлы(Папка) ИмяФайла = ПолучитьИмяФайла(Папка) Если ЭтоПапка(ИмяФайла) То Поиск(ИмяФайла, Строка) Иначе ПоискВФайле(ИмяФайла, Строка) Конец Конец Конец Реализуете такой алгоритм на своём любимом языке программирования с помощью своих любимых команд перебора файлов в каталоге (например, FirstFirst, FindNext)
всегда было интересно... вроде у винды максимально-возможный тид/пид 65535, что будет при переполнении операционной системы потоками/процессами? новые просто не будут создаваться, или уйдем в бсод может))) всегда так и делал... канеш медленнее, чем с потоками, но по-моему вполне адекватный вариант... тем более, что в варианте с потоками потенциально можно забить не только дескрипторы, но и виртуальную память... ЗЫ KIV, как вы символ табуляции ставите в поле для ввода сообщения?)))
Я и имел ввиду же N-ое количество тредов, которое вы сами и определите и будете следить за этим количеством. Без всяких там индексаций и прочих теорий струн должно годно получиться и несложно.