Из флагов - список

Тема в разделе "WASM.A&O", создана пользователем warsem, 5 июл 2005.

  1. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    Вообщемто есть получаю от GetLogicalDrives список дисков.

    Все они в eax. Бит - диск. Оно понятно. Мне нужно сделать цикл, в котором нужен адрес типа "X:\". Вопрос такой: как это сделать.



    Ну я меня есть пара идей. Типа куча cmp или test. Или еще более извращенная, с двумя счетчиками. Но все это мне как-то не нравиться. Может посоветуете чего нибудь красивого?



    ---------------------------------------------------------------------- --

    И еще попутный вопрос. Если прога висит в памяти, и рысчкает по всем папкам(рекурсивно), насколько стоит ставить Sleep, чтобы ОС не грузилась?
     
  2. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Код (Text):
    1.  
    2.  invoke GetLogicalDrives
    3.  mov edx, "A"-1
    4.  @@1:
    5.   test eax, eax
    6.   jz @@kon
    7.   inc edx
    8.   shr eax, 1
    9.  jnc @@1
    10.   ;edx-имя диска
    11.   m_pecreg10 edx
    12.  jmp @@1
    13.  @@kon:
    14.  




    >насколько стоит ставить Sleep, чтобы ОС не грузилась?

    если не нужно сканировать совсем без перерыва, то в основном цикле 100-1000мс. Хотя это лучше подправлять по частоте проца и текущей загрузки системы
     
  3. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Код (Text):
    1.         call    GetLogicalDrives
    2. l1:     inc byte ptr [str]
    3.         shr eax, 1
    4.         jnc skip
    5.         pushfd
    6.     ; ---------- действия с str ------------
    7.         popfd
    8. skip:       jnz l1
    9.  
    10.  
    11. str     db  '@:\', 0
     
  4. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    а чем тебе не нравится ?





    1) GetLogicalDriveStrings(



    DWORD nBufferLength, // size of buffer

    LPTSTR lpBuffer // address of buffer for drive strings

    );

    хотя у _BC_ тоже красиво

    2)Sleep(0) ,будет достаточно , другое дело что у меня иногода проблемы бывали с этим , я ставлю sleep(1);
     
  5. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    yureckor

    _BC_

    Я почти так же делал(идей). Но у вас красивей.



    staier

    Ох как она мне понравилась:) Я про такую и не знал:dntknw:



    "Хотя это лучше подправлять по частоте проца и текущей загрузки системы"

    А как такие вещи узнать?

    Ну часто-ту была тема, это разбирусь(надеюсь), а загрущенность тачки?



    Спасибо за Ответы.
     
  6. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    warsem

    функциф sleep(y) отдают текущия квант исполнения системе и не получает новых квантов "y" миллисекунд ( с какой- то точностью)

    тут скорее имеет смысл спросить , как часто надо вызывать

    Sleep



    а вот это уже вопрос, который без профилирования обсуждеть бессмысленно

    то есть тот цикл , который грузит систему - кандидат на вставку Sleep



    а лучше поставь idle_priority и не парься , пусть себе грузит
     
  7. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    "а лучше поставь idle_priority и не парься"

    Со sleep'ом выглядит все как-то проще...
     
  8. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    зато не подвесишь ничего