На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (245) « Первая ... 136 137 [138] 139 140 ...  244 245  ( Перейти к последнему сообщению )  
> Есть ли будущее у DELPHI?
    Цитата --Ins-- @
    в WinAPI есть механизмы неблокирующего вводы/вывода, думаю ты и без меня знаешь

    Забыл, каюсь. Таки есть. http://tinyclouds.org/iocp-links.html

    Цитата --Ins-- @
    Плюс, откуда ты знаешь как работает драйвер при вызове, скажем, функции вывода графики? Может он кладет данные в некую область памяти и возвращает управление. В OpenGL вроде так и работает

    Цитата Повстанець @
    Можно просто запросить статус, или получить объект синхронизации с операцией, как вот в WinAPI, например. :D

    Ага. Ну как бы есть у нас возможность на низком уровне писать данные в один буфер, получать его состояние в другом буфере. Операция выполнилась. Вечно держать открытым буфер, который будет возвращать нам информацю о давно завершившейся операции? Или очищать буфера завершенных операций через некоторое время? Но никто же мне не запрещает вызвать информацию о состоянии операции и через неделю работы программы, когда ее буферы будут наверняка удалены из памяти? Так что синхронное АПИ с отдельным потоком видится мне более удачной реализацией. Даже если наверху оно будет обернуто асинхронными вызовами с колбеками или опросом состояния.
      D_KEY, твоё мнение очень важно для нас :D Вот скажи всё, что ты думаешь об это коде
      ExpandedWrap disabled
        void Scenario2::WriteTextButton_Click(Object^ sender, RoutedEventArgs^ e)
        {
            rootPage->ResetScenarioOutput(OutputTextBlock);
            StorageFile^ file = rootPage->SampleFile;
            if (file != nullptr)
            {
                String^ userContent = InputTextBox->Text;
                if (userContent != nullptr && !userContent->IsEmpty())
                {
                    create_task(FileIO::WriteTextAsync(file, userContent)).then([this, file, userContent](task<void> task)
                    {
                        try
                        {
                            task.get();
                            OutputTextBlock->Text = "The following text was written to '" + file->Name + "':\n\n" + userContent;
                        }
                        catch(COMException^ ex)
                        {
                            rootPage->HandleFileNotFoundException(ex);
                        }
                    });
                }
                else
                {
                    OutputTextBlock->Text = "The text box is empty, please write something and then click 'Write' again.";
                }
            }
        }

      Прошу тебя, не сдерживайся! :lol:
        :ph34r:
        Я в файлы только логи пишу... "Обычные" и специальные(логирование запросов/событий и т.п. для последующего анализа(который сам тоже блокирующий)). Максимум, что приходится делать - это буферезация и отложенная запись в файл.
        А вот с сокетами и пр. предпочитаю как раз асинхронно(относительно, через boost::asio, в основном) или неблокирующе(опросами в отдельных тредах) или мультиплексированно(select/epoll/kqueue) работать. Правда напрямую уже давно это не трогал...
        О WinRT ничего практически не знаю, потому и молчу.
          Цитата [S]mike @
          Но никто же мне не запрещает вызвать информацию о состоянии операции и через неделю работы программы, когда ее буферы будут наверняка удалены из памяти?


          Эээ, не понял, кем удалены и на каком основании?
            Цитата MyNameIsIgor @
            Прошу тебя, не сдерживайся! :lol:

            Это лекарство от быдлокодеров какое-то. В Андроиде для этого есть AsyncTask (универсальный механизм, не обязательно для ввода-вывода), который выглядит куда проще и логичнее.
              Цитата [S]mike @
              Ага. Ну как бы есть у нас возможность на низком уровне писать данные в один буфер, получать его состояние в другом буфере. Операция выполнилась. Вечно держать открытым буфер, который будет возвращать нам информацю о давно завершившейся операции? Или очищать буфера завершенных операций через некоторое время? Но никто же мне не запрещает вызвать информацию о состоянии операции и через неделю работы программы, когда ее буферы будут наверняка удалены из памяти? Так что синхронное АПИ с отдельным потоком видится мне более удачной реализацией. Даже если наверху оно будет обернуто асинхронными вызовами с колбеками или опросом состояния.
              У меня есть подозрение, что всё синхронное АПИ -- есть не более чем обёртка над асинхронным со встроенным ожиданием завершения операции. Не знаю, что там у тебя за проблемы, но решай их так же. :D
                Цитата MyNameIsIgor @
                Вот скажи всё, что ты думаешь об это коде

                Я не хочу думать об этом коде :D
                Кстати, тут говорили, что на шарпе круче сделано(и что это достоинство именно языка). И как аналогичный код будет выглядеть там?
                  Цитата [S]mike @
                  Это лекарство от быдлокодеров какое-то.

                  Что вы, что вы! Окститесь! Это вполне официальный пример от M$ как надо писать код под WinRT. И уж конечно для этого им понадобился свой C++ с паскалюгой крышечками, ибо все существующие решения обладают поминавшимся здесь недостатком.

                  Добавлено
                  Цитата D_KEY @
                  Кстати, тут говорили, что на шарпе круче сделано(и что это достоинство именно языка).

                  Это сахар языка. Семантически он делает то же. Я писал об этом
                  Цитата MyNameIsIgor @
                  async/await - это не синхронный код, это сахароза для лапши

                  Цитата D_KEY @
                  И как аналогичный код будет выглядеть там?

                  Так
                  ExpandedWrap disabled
                            private async void WriteTextButton_Click(object sender, RoutedEventArgs e)
                            {
                                try
                                {
                                    rootPage.ResetScenarioOutput(OutputTextBlock);
                                    StorageFile file = rootPage.sampleFile;
                                    if (file != null)
                                    {
                                        string userContent = InputTextBox.Text;
                                        if (!String.IsNullOrEmpty(userContent))
                                        {
                                            await FileIO.WriteTextAsync(file, userContent);
                                            OutputTextBlock.Text = "The following text was written to '" + file.Name + "':" + Environment.NewLine + Environment.NewLine + userContent;
                                        }
                                        else
                                        {
                                            OutputTextBlock.Text = "The text box is empty, please write something and then click 'Write' again.";
                                        }
                                    }
                                }
                                catch (FileNotFoundException)
                                {
                                    rootPage.NotifyUserFileNotExist();
                                }
                            }
                  Сообщение отредактировано: MyNameIsIgor -
                    Цитата [S]mike @
                    В Андроиде для этого есть AsyncTask (универсальный механизм, не обязательно для ввода-вывода), который выглядит куда проще и логичнее.


                    Думаю, такой механизм несложно написать для чего угодно и самому. Очередь задач + пул потоков для их выполнения. Я в своих проектах иногда использую
                      Цитата --Ins-- @
                      Очередь задач + пул потоков для их выполнения.

                      Только для полного счастья пул должен переключать контексты потоков, т.е. быть пулом легковесных потоков поверх потоков ОС. Тогда вся лапша исчезает сама собой.
                        Цитата MyNameIsIgor @
                        И уж конечно для этого им понадобился свой C++ с паскалюгой крышечками, ибо все существующие решения обладают поминавшимся здесь недостатком.

                        30 гигабайт хлама в Windows 7 пополнится еще 5-ю в Windows 8?
                        Сообщение отредактировано: [S]mike -
                          Цитата [S]mike @
                          30 гигабайт хлама в Windows 7 пополнится еще 5-ю в Windows 8?

                          Даже и не знаю... Хватит ли пяти?
                            Цитата [S]mike @
                            Что-то не видел я асинхронного ввода-вывода в Windows API.

                            это говорит только о том, что ты сильно плаваешь в WinAPI и не в курсе про функции ReadFile/WriteFile

                            Цитата MyNameIsIgor @
                            Lightweight потоки решают те же проблемы при полностью синхронном коде.

                            код давай. на плюсах, как бы это

                            ExpandedWrap disabled
                              while (await GetBoolAsync())
                              {
                                 await DoWorkAsync();
                              }


                            выглядило бы при наличии легковесных поток на плюсах
                              Цитата jack128 @
                              код давай. на плюсах, как бы это выглядило бы при наличии легковесных поток на плюсах

                              Вы не поверите, но...
                              так

                              ExpandedWrap disabled
                                while (GetBoolAsync())
                                {
                                   DoWorkAsync();
                                }


                              :lool:
                              Сообщение отредактировано: MyNameIsIgor -
                                Цитата jack128 @
                                это говорит только о том, что ты сильно плаваешь в WinAPI и не в курсе про функции ReadFile/WriteFile

                                Я уже все позабывал, перешел на Джаву, Андроид и Линукс :oops:

                                У Майкрософт и Дельфи будущего нет :yes:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (245) « Первая ... 136 137 [138] 139 140 ...  244 245


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1505 ]   [ 15 queries used ]   [ Generated: 22.12.25, 16:50 GMT ]