Имя:    Пароль:      Помнить меня       
Unsorted   ~  Software  ~  Development and Design  ~  Помощь по С/С++ Все вопросы по С/С++ сюда
На страницу «  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  »
Doctor_Mozg
Сообщение  21 Ноя 2006, 15:18  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

Неоспоримым достоинством языка С++ является то, что он является языком одновременно и высокого и низкого уровней, что делает его незаменимым при разработке игр и других сложных и требовательных к производительности приложений.

P.S. Перед задаванием вопросов вроде "Что делает эта функция" настоятельно рекомендуется поизучать MSDN.
P.P.S. В ближайшее время выложу много литературы по этому вопросу.
В начало
Профиль : Фотоальбом : Личное Сообщение : ICQ
Абсент
Сообщение  13 Янв 2008, 14:17  Ссылка : Ответить с цитатой
Возраст: 34 Пол: Мужской  Доверенный пользователь
C нами с 21.03.2005
Репутация: 130

Рыся, ну собственно да
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт
Барада
Сообщение  13 Янв 2008, 14:18  Ссылка : Ответить с цитатой
Возраст: 39 Пол: Мужской 
C нами с 10.08.2005
Репутация: 6.9

Абсент, почитайте исходники апишной функции FindWindow . Она использует рекурсивный самовызов. Это именно то, что вам нужно.
В начало
Профиль : Фотоальбом : Личное Сообщение
chaser
Сообщение  13 Янв 2008, 20:37  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

Абсент, какая задача-то? Найти папку с заданным именем? Хотя бы одну или все?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
Абсент
Сообщение  13 Янв 2008, 20:55  Ссылка : Ответить с цитатой
Возраст: 34 Пол: Мужской  Доверенный пользователь
C нами с 21.03.2005
Репутация: 130

chaser, все папки с таким именем
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт
chaser
Сообщение  13 Янв 2008, 21:27  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

Ну типа вот. Правда, я не компилил ни разу, так как под рукой нет компилятора под виндовс.

#include <algorithm>
#include <vector>
#include <string>

#include "windows.h"

#include "еще что-нибудь, если надо"

// Найти все папки с заданным именем
void
find_folders(const std::string& haystack,      // откуда начинать поиск
             const std::string& needle,        // что ищем
             std::vector<std::string>& result) // складываем найденное сюда
{
    WIN32_FIND_DATA data; 
    HANDLE hf = FindFirstFile((haystack + "\\*").c_str(), &data); 

    // Если неудачно открыли директорию, ничего не делаем
    if (hf == INVALID_HANDLE_VALUE)
        return;

    // Перебираем все файлы и папки в папке haystack
    do {
        // Если это папка...
        if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            // То сперва получим путь к ней.
            std::string path = haystack + "\\" + data.cFileName;

            // Во-первых, это может быть то, что мы ищем
            if (needle == data.cFileName)
                result.push_back(path);
            // А во-вторых, в ней может лежать то, что мы ищем
            find_folders(path, needle, result);
        }
    } while (FindNextFile(hf, &data));

    // Закрываем каталог
    FindClose(hf);
}


// Вывести содержимое каталога
void
list_folder(const std::string& path)
{
    std::cout << "--- " << path << ": " << std::endl;

    WIN32_FIND_DATA data; 
    HANDLE hf = FindFirstFile((path + "\\*").c_str(), &data); 
    
    if (hf == INVALID_HANDLE_VALUE)
        return;

    do {
        std::cout << data.cFileName << std::endl;
    } while (FindNextFile(hf, &data));

    FindClose(hf);
}


// Решаем поставленную задачу
void
find_and_list(const std::string& haystack,  // «корень» поиска
              const std::string& needle)    // имя искомых папок
{
    std::vector<std::string> folders;
    find_folders(haystack, needle, folders);
    std::for_each(folders.begin(), folders.end(), list_folder);
}
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
Абсент
Сообщение  28 Янв 2008, 16:23  Ссылка : Ответить с цитатой
Возраст: 34 Пол: Мужской  Доверенный пользователь
C нами с 21.03.2005
Репутация: 130

с какого сайта исходник?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт
chaser
Сообщение  29 Янв 2008, 3:48  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

Абсент, сам написал.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
splav
Сообщение  29 Янв 2008, 13:09  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской  Доверенный пользователь
C нами с 22.01.2006
Репутация: 256.8

Вопрос такой. Хочется использовать STL queue для передачи данных между потоками(несколько пишуших и несколько читающих). Достаточно ли запихать в мутексы push и pop?

P.S. альтернативные и более шустрые реализации приветствуются

как вариант может просто сделать статический массив и бегающие указатели, при pop в мутексе копировать элемент в область памяти, на которую передали указатель ну соответственно внутренние указатели ворочать... Только больно лень Улыбочка
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
chaser
Сообщение  29 Янв 2008, 17:08  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

splav писал(а):
Вопрос такой. Хочется использовать STL queue для передачи данных между потоками(несколько пишуших и несколько читающих). Достаточно ли запихать в мутексы push и pop?


Да, почему нет? Еще перед pop(), возможно, будет проверка на empty(), тоже «в мьютексе» (хотя, скорее всего, обойдется без нее, так как наверняка будет использоваться семафор для ожидания...). Главное, чтобы не передавались «коварные» данные типа boost::shared_ptr и проч.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
splav
Сообщение  29 Янв 2008, 21:52  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской  Доверенный пользователь
C нами с 22.01.2006
Репутация: 256.8

chaser, а можно ли использовать разные mutex для pop и push? Улыбочка Собственно главный вопрос.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
chaser
Сообщение  29 Янв 2008, 23:43  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

splav, то есть синхронизировать между собой отдельно читателей и отдельно писателей? Нельзя, конечно Улыбочка
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
seb
Сообщение  30 Янв 2008, 10:09  Ссылка : Ответить с цитатой
Возраст: 44 Пол: Мужской  Доверенный пользователь
C нами с 05.04.2005
Репутация: 121.1

splav, нужно читать описание той реализации STL, которую ты используешь... насколько я помню, стандарт не определяет - должна она быть thread safe или не должна. если твоя версия не thread safe то защищать нужно _все_ обращения к очереди. кроме push и pop ещё есть empty(); size(); front(); back(); в любой из них может возникнуть race condition

_____________________________
IRC WeNet #programming
jid: seb2000@jabber.ru
В начало
Профиль : Фотоальбом : Личное Сообщение : JabberID
splav
Сообщение  30 Янв 2008, 11:25  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской  Доверенный пользователь
C нами с 22.01.2006
Репутация: 256.8

seb, chaser, короче делаю свою реализацию - хоть понятно чего ждать... Ибо покопавшись в том, что нашел получается, почти все вызовы надо запихивать в критические секции. Можно более независимо сделать в моём случае.
Всем спасибо.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
chaser
Сообщение  30 Янв 2008, 23:53  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

splav, а оно тебе действительно нужно? Напиши тогда для начала простую «обертку» для STL'ной очереди, а потом, если будет так важно, улучшишь реализацию. Measure before you optimise Подмигивание

Расскажи, кстати, идеи улучшения, интересно.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
splav
Сообщение  31 Янв 2008, 0:20  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской  Доверенный пользователь
C нами с 22.01.2006
Репутация: 256.8

chaser, не люблю общие вещи... Например, учитывая семафоры, явно можно одновременно добавлять и забирать данные. + использовать специфический аллокатор (для одного рамера). А в моём случае может более оправдана будет статическая реализация. Вопрос о сроках не стоит - делаю для себя. Так что можно разгуляться.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
Показать сообщения:   
На страницу «  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  »

Unsorted   ~  Software  ~  Development and Design  ~  Помощь по С/С++

Ответить на тему

Перейти:  





Powered by phpBB   © Unsorted Team  support@unsorted.me  promo@unsorted.me  Полезные скрипты