Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 03.11.2017, 06:38   #1
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 607
Репутация: 145
По умолчанию macosx + qdiriterator

Так, просто Вобщем интересный "баг" впоймал, если в цикле по QDirIterator добавлять в папку файлы, то на маке iterator->hasNext() сразу фейлится. На линухе все норм.
Вот мне теперь интересно, а если сторонняя прога че запишит в папку, пока длинный цикл листинга идет? Все прерывается? Красота...
alexzk вне форума   Ответить с цитированием
Старый 03.11.2017, 08:18   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,132
Репутация: 1564
По умолчанию

А сколько файлов было до этого?
waleri на форуме   Ответить с цитированием
Старый 03.11.2017, 10:09   #3
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 607
Репутация: 145
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А сколько файлов было до этого?
Ну там у меня удваивается....делается список MOV, для каждого из них вызывается ffmpeg создать из него jpeg. В std::thread через QProcess.

Похоже, все ж дело не в итераторе. Я разделил формирование списка и обработку на 2 цикла. И вот после первого же вызова ffmpeg поток хочет завершаться.

Код:

 using runner_t    = std::shared_ptr<boost::thread>;
    using runnerint_t = std::shared_ptr<std::atomic<bool>>;

    using runner_f_t  = std::function<void(const runnerint_t& should_int)>;
inline runner_t startNewRunner(const runner_f_t& func, size_t stackSizeBytes = 1024 * 1024 * 2)
    {
        auto stop = runnerint_t(new std::atomic<bool>(false));
        boost::thread::attributes attr;
        attr.set_stack_size(stackSizeBytes);

        return runner_t(new boost::thread(attr, std::bind(func, stop)), [stop](boost::thread* p)
        {
            stop->store(true);
            if (p)
            {
                if (p->joinable())
                    p->join();
                delete p;
            }
        });
    }

Срабатывает stop->store(true); что прерывает все циклы внутри функции потока ессно. Кстати уже вот заменил на boost::thread, думал мож стека мало (на маке 512 кб).

Последний раз редактировалось alexzk; 03.11.2017 в 10:13.
alexzk вне форума   Ответить с цитированием
Старый 03.11.2017, 14:31   #4
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 607
Репутация: 145
По умолчанию

Разобрался...запуском нового процесса создавалось "ложное пробуждение" conditional_var, которая сигналила, что поток завершился и указатель можно убивать. Что вызывало убивание указателя (см. выше) и соотв. сигнал потоку, что мы тебя убиваем....

Цитата:
В виду некоторых сложностей при создании пробуждающего условия, которое может быть предсказуемых в многопроцессорных системах, могут происходить ложные пробуждения (spurious wakeup). Это означает, что поток может быть пробужден, даже если никто не сигнализировал условной переменной. Поэтому необходимо еще проверять, верно ли условие пробуждение уже после то, как поток был пробужден. Т.к. ложные пробуждения могут происходить многократно, такую проверку необходимо организовывать в цикле.
alexzk вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бюджетный MacOSX mutabor Операционные системы общие вопросы 5 25.12.2010 17:41
Программирование в MacOSX Cocoa Ivan_32 Qt и кроссплатформенное программирование С/С++ 2 28.07.2009 13:18




08:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru