Есть ли будущее у DELPHI?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Правила раздела:
| Страницы: (245) « Первая ... 136 137 [138] 139 140 ... 244 245 ( Перейти к последнему сообщению ) |
Есть ли будущее у DELPHI?
|
Сообщ.
#2056
,
|
|
|
|
Забыл, каюсь. Таки есть. http://tinyclouds.org/iocp-links.html Цитата --Ins-- @ Плюс, откуда ты знаешь как работает драйвер при вызове, скажем, функции вывода графики? Может он кладет данные в некую область памяти и возвращает управление. В OpenGL вроде так и работает Цитата Повстанець @ Можно просто запросить статус, или получить объект синхронизации с операцией, как вот в WinAPI, например. ![]() Ага. Ну как бы есть у нас возможность на низком уровне писать данные в один буфер, получать его состояние в другом буфере. Операция выполнилась. Вечно держать открытым буфер, который будет возвращать нам информацю о давно завершившейся операции? Или очищать буфера завершенных операций через некоторое время? Но никто же мне не запрещает вызвать информацию о состоянии операции и через неделю работы программы, когда ее буферы будут наверняка удалены из памяти? Так что синхронное АПИ с отдельным потоком видится мне более удачной реализацией. Даже если наверху оно будет обернуто асинхронными вызовами с колбеками или опросом состояния. |
|
Сообщ.
#2057
,
|
|
|
|
D_KEY, твоё мнение очень важно для нас
Вот скажи всё, что ты думаешь об это коде![]() ![]() 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."; } } } Прошу тебя, не сдерживайся! |
|
Сообщ.
#2058
,
|
|
|
|
Я в файлы только логи пишу... "Обычные" и специальные(логирование запросов/событий и т.п. для последующего анализа(который сам тоже блокирующий)). Максимум, что приходится делать - это буферезация и отложенная запись в файл. А вот с сокетами и пр. предпочитаю как раз асинхронно(относительно, через boost::asio, в основном) или неблокирующе(опросами в отдельных тредах) или мультиплексированно(select/epoll/kqueue) работать. Правда напрямую уже давно это не трогал... О WinRT ничего практически не знаю, потому и молчу. |
|
Сообщ.
#2059
,
|
|
|
|
Цитата [S]mike @ Но никто же мне не запрещает вызвать информацию о состоянии операции и через неделю работы программы, когда ее буферы будут наверняка удалены из памяти? Эээ, не понял, кем удалены и на каком основании? |
|
Сообщ.
#2060
,
|
|
|
|
Цитата MyNameIsIgor @ Прошу тебя, не сдерживайся! ![]() Это лекарство от быдлокодеров какое-то. В Андроиде для этого есть AsyncTask (универсальный механизм, не обязательно для ввода-вывода), который выглядит куда проще и логичнее. |
|
Сообщ.
#2061
,
|
|
|
|
Цитата [S]mike @ У меня есть подозрение, что всё синхронное АПИ -- есть не более чем обёртка над асинхронным со встроенным ожиданием завершения операции. Не знаю, что там у тебя за проблемы, но решай их так же. Ага. Ну как бы есть у нас возможность на низком уровне писать данные в один буфер, получать его состояние в другом буфере. Операция выполнилась. Вечно держать открытым буфер, который будет возвращать нам информацю о давно завершившейся операции? Или очищать буфера завершенных операций через некоторое время? Но никто же мне не запрещает вызвать информацию о состоянии операции и через неделю работы программы, когда ее буферы будут наверняка удалены из памяти? Так что синхронное АПИ с отдельным потоком видится мне более удачной реализацией. Даже если наверху оно будет обернуто асинхронными вызовами с колбеками или опросом состояния. |
|
Сообщ.
#2062
,
|
|
|
|
Цитата MyNameIsIgor @ Вот скажи всё, что ты думаешь об это коде Я не хочу думать об этом коде Кстати, тут говорили, что на шарпе круче сделано(и что это достоинство именно языка). И как аналогичный код будет выглядеть там? |
|
Сообщ.
#2063
,
|
|
|
|
Цитата [S]mike @ Это лекарство от быдлокодеров какое-то. Что вы, что вы! Окститесь! Это вполне официальный пример от M$ как надо писать код под WinRT. И уж конечно для этого им понадобился свой C++ с Добавлено Цитата D_KEY @ Кстати, тут говорили, что на шарпе круче сделано(и что это достоинство именно языка). Это сахар языка. Семантически он делает то же. Я писал об этом Цитата D_KEY @ И как аналогичный код будет выглядеть там? Так ![]() ![]() 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(); } } |
|
Сообщ.
#2064
,
|
|
|
|
Цитата [S]mike @ В Андроиде для этого есть AsyncTask (универсальный механизм, не обязательно для ввода-вывода), который выглядит куда проще и логичнее. Думаю, такой механизм несложно написать для чего угодно и самому. Очередь задач + пул потоков для их выполнения. Я в своих проектах иногда использую |
|
Сообщ.
#2065
,
|
|
|
|
Цитата --Ins-- @ Очередь задач + пул потоков для их выполнения. Только для полного счастья пул должен переключать контексты потоков, т.е. быть пулом легковесных потоков поверх потоков ОС. Тогда вся лапша исчезает сама собой. |
|
Сообщ.
#2066
,
|
|
|
|
Цитата MyNameIsIgor @ И уж конечно для этого им понадобился свой C++ с паскалюгой крышечками, ибо все существующие решения обладают поминавшимся здесь недостатком. 30 гигабайт хлама в Windows 7 пополнится еще 5-ю в Windows 8? |
|
Сообщ.
#2067
,
|
|
|
|
Цитата [S]mike @ 30 гигабайт хлама в Windows 7 пополнится еще 5-ю в Windows 8? Даже и не знаю... Хватит ли пяти? |
|
Сообщ.
#2068
,
|
|
|
|
|
Сообщ.
#2069
,
|
|
|
|
Цитата jack128 @ код давай. на плюсах, как бы это выглядило бы при наличии легковесных поток на плюсах Вы не поверите, но... так ![]() ![]() while (GetBoolAsync()) { DoWorkAsync(); } |
|
Сообщ.
#2070
,
|
|
|
|
Цитата jack128 @ это говорит только о том, что ты сильно плаваешь в WinAPI и не в курсе про функции ReadFile/WriteFile Я уже все позабывал, перешел на Джаву, Андроид и Линукс У Майкрософт и Дельфи будущего нет |