Russian Qt Forum
Ноябрь 25, 2024, 12:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7] 8 9 ... 17   Вниз
  Печать  
Автор Тема: Igors, это ты? :)  (Прочитано 132463 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #90 : Август 31, 2018, 18:09 »

она уже - пуп земли. и всегда им была.
именно потому, что на неё всегда можно рассчитывать,
и любой моральный компилятор обязан её поддерживать.


Ахаахах, то-то в последнем XCode забыли положить хедера из с++14))))
Я уж молчу про мелкомягких
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #91 : Август 31, 2018, 18:12 »

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

Но кутред не нужно наследовать уже версии с 4.5.
Нужно запустить функцию - юзаете std::thread.
Нужен эвентлуп - юзаете QThread.
Ничо что они решают несколько разные задачи теперь? Ну да, до сих пор есть виртуальный run который не выкинешь потому что сломается куча старого кода. Но вас кто-то заставляет им пользоваться в новом коде?
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #92 : Август 31, 2018, 19:27 »

Вы предлагает сломать весь существующий код или чо?
я ничего не предлагаю.
лишь сожалению, что в работе с кутей приходиццо мириццо с ущербностью её подхода.

не могут сделать по человечечьи - что ж теперь...

Ну давайте заодно в std::vector на signed перейдем, а то говно какое-то, приходится size_t богомерзкий использовать.
не давайте. богомерзкие хотят использовать знаковый для хранения без знаковых величин.
богомерзкие - омерзительный народ. противоречат здравому смыслу.
к счастью, дизайнеры крестов моральные люди.
и подобной ереси не допустили.

Или std::string наконец уже допилим до поддержки utf-8 и различных кодировок.

интересно, как вообще может быть связанно знаковость/беззнаковость размера вектора и поддержка кодировок строки?
вы там случаем ничего такого не употребляете?



Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #93 : Август 31, 2018, 19:34 »

Нужно запустить функцию - юзаете std::thread.
Нужен эвентлуп - юзаете QThread.
запустил функцию. просрался QSocket.
и нафиг я должен думать о каких то там эвентлупах,
когда мне тупо хотелось прочитать пару байт в отдельном треде?

Ничо что они решают несколько разные задачи теперь?

ничо, если не считать того, что уважающие себя самолеты выполняют одинаковую задачу: летают.
даже если это самолеты двух разных компаний, и у них различаются детали конструкции.

от кютешнего треда я ожидают ровно тоже самое, что от стандартного треда, или от нативного апи системы:
создать мне нитку исполнения, и что бы без всяких там подстав типа нерабочего эвентлупа.


Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #94 : Август 31, 2018, 19:54 »

вы находите удобным писать каждый раз на каждый чих очередной класс с наследованием?
писать тонны кода там, где можно было бы ничего не писать?
Какие тонны? Где?  Непонимающий

вот здесь:
каждый раз на каждый чих очередной класс с наследованием

тут вроде по-русски написано, не?

вы там выше в этой самой теме приводили пример,
где переопределяли метод run.
и вот нафига это нужно?

Давайте не скатываться в пустые пререкания, а возьмем простую задачку и сравним.  Ну вот хотя бы банальщина - копирование файла в фоне (типичный "вынос в поток"). С минимальным стервисом - показ прогресса в главной нитке (пусть в консоли) и возможность отмены. Или предложите свою, я не против.

Код:
// бизнес-логика дергает этот метод для копирования в фоне
template<class s>
void samle::copy(const s& from, const s& to)
{
    // само копирование делаем в фоне
    const auto background_copying = [this]()
    {
        // коллбек вызывается для уведомления текущего прогресса
        // что бы внешняя сторона могла его как то нарисовать
        // если бизнес-логика захочет прекратить копирование
        // данный коллбек вернёт false
        // если же все хорошо, и нужно копировать дальше,
        // тогда возвращаем true
        const auto progress = [this](const size_t bytes)
        { 
            // рисуем текущее состояние прогресса
            std::cout << calculateProgressPercentage(bytes, total) << "%\n";

            // false - отменить копирование
            return !this->wasStopped();
        }
        tools::copy(from, to, progress);
    };

    // задача исполняется в отдельной ниточке
    std::thread(background_copying ).detach();
};



Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #95 : Август 31, 2018, 20:55 »

Больше загадочных tools::
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #96 : Август 31, 2018, 22:35 »

А, ну и да, у вас не выполнено требоание "показ прогресса в главной нитке".
Можно конечно долго спорить что это никому не нужно но на практике таки когда-то да и нужно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #97 : Сентябрь 01, 2018, 15:28 »

Код:
// бизнес-логика дергает этот метод для копирования в фоне
Ну по такому огрызку понять мудрено. Вот мой компилябельный пример (аттач). Файлы копируются в тот же фолдер, к имени добавляется " test_copy".  Добавлять файлы (кнопка "Add Files") можно в любой момент, по одному и пачками. Отмена одна на всех. Файл .pro писала MSVC, поэтому не уверен 100% что он рабочий.

вы там выше в этой самой теме приводили пример,
где переопределяли метод run.
и вот нафига это нужно?
Чтобы работать "по старинке" с примитивами синхронизации - нужда в этом возникает весьма редко. Обычно посылать/принимать сигналы из одной нитки в другой прекрасно устраивает, сидеть на событийном цикле очень удобно.

Вернемся к теме. Вы утверждаете что std "тупо лучше", в Qt, мол, "многословно", а слот/сигналы вообще "г" (ну "кидаться говном все мастера" как говорил еще незабвенный Пастор). Будьте добры привести рабочий код подтверждающий Вашу точку зрения.
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #98 : Сентябрь 03, 2018, 11:27 »

А, ну и да, у вас не выполнено требоание "показ прогресса в главной нитке".
Можно конечно долго спорить что это никому не нужно но на практике таки когда-то да и нужно.

"главная нитка" - это к тем, кто в многопоточку не умеет.



Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #99 : Сентябрь 03, 2018, 11:36 »

Больше загадочных tools::

под капотом будет что-то вроде:

Код:
void *thread_proc(void *arg)
{
    // Error checking omitted for expository purposes
    char buffer[BUFSIZE];
    int in = open("source_file", O_RDONLY);
    int out = open("destination_file", O_WRONLY | O_CREAT | O_TRUNC);

    // Get the input file size
    struct stat st;
    fstat(in, &st);

    progress = 0;
    max_progress = st.st_size;

    ssize_t bytes_read;
    while((bytes_read = read(in, buffer, BUFSIZE)) > 0)
    {
        write(out, buffer, BUFSIZE
        progress += bytes_read;
    }

    // copy is done, or an error occurred
    close(in);
    close(out);

    return 0;
}

void start_file_copy()
{
    pthread_t t;
    pthread_create(&t, NULL, &thread_proc, 0);
}
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #100 : Сентябрь 03, 2018, 12:43 »

> и нафиг я должен думать о каких то там эвентлупах,

Не, ну так нельзя. Qt - это фреймворк со своими правилами.

> запустил функцию. просрался QSocket.

Где? Просто надо юзать блокирующие waitForXXX(), т.к. в не-Qt-шных тредах нет евент лупа. Иначе - ССЗБ, читай доку.

PS: Можно все перевернуть с ног на голову, заявив, что, мол беру boost asio, и нифига не работает, т.к. там тоже есть луп/сервис (и его надо запускать),
а я не хочу его запускать, кочу юзать чтобы из QThread оно само работало. Мол, boost гавно, не работает в Qt.

Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #101 : Сентябрь 03, 2018, 12:47 »

> "главная нитка" - это к тем, кто в многопоточку не умеет.

Многопоточка для тех, кто асинхронный ввод/вывод не осилил. Пачкование тредов это не есть хороший дизайн, это костыли. Так и тредов не хватит.  Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #102 : Сентябрь 03, 2018, 13:13 »

Многопоточка для тех, кто асинхронный ввод/вывод не осилил.
Коллеги, давайте не смешивать теплое с мягким. Многопоточность и асинхронность решают совершенно разные задачи и чудесно сосуществуют вместе.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #103 : Сентябрь 03, 2018, 17:05 »

"главная нитка" - это к тем, кто в многопоточку не умеет.

Ну возьмите любую другую нитку - часто возникает задача передать управление в _определенный_ тред (обычно тот, который запускал задачу) без явного вызова wait().
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #104 : Сентябрь 03, 2018, 17:52 »

"главная нитка" - это к тем, кто в многопоточку не умеет.
А что, Вы умеете обновлять UI из любой нитки (а не только главной)? Расскажите как, я так не умею  Улыбающийся

под капотом будет что-то вроде:
Что/где и под каким капотом - никто не спрашивал. Речь идет о простейшем "выносе длинной операции в поток"(чтоб UI не замерзал) который здесь делают все кому не лень. Потому что - да, на Qt это легко и приятно. А вот как на std -хз. Ни о каком тамошнем механизме обмена инфой между нитками я не знаю. Мы увидим std реализацию этой простейшей задачки - или только понты типа
лишь сожалению, что в работе с кутей приходиццо мириццо с ущербностью её подхода.

не могут сделать по человечечьи - что ж теперь...
У меня давно уже стойкое подозрение - человек "ниасилил" букварь. Развейте пожалуйста, очень не хочется разочаровываться в человеке  Плачущий
Записан
Страниц: 1 ... 5 6 [7] 8 9 ... 17   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.113 секунд. Запросов: 23.