FreeBasic
Главная
Вход
Регистрация
Пятница, 13.06.2025, 23:18Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 8 из 8
  • «
  • 1
  • 2
  • 6
  • 7
  • 8
Околоотладочная тема и выпуск пара
zamabuvaraeuДата: Пятница, 15.04.2022, 14:16 | Сообщение # 106
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Цитата laser ()
То есть предлагаешь останавливать поток до приема данных? Чем это лучше блокирующих сокетов?
Функция MsgWaitForMultipleObjectsEx не блокирует GUI, виндовые сообщения продолжают обрабатываться. Без всяких проверок по таймеру.
Цитата laser ()
Надо 1000 соединений, создашь 1000 потоков? Браво! Верх оптимизации!
Не надо, всё работает в одном потоке.
Цитата laser ()
Тут ты ошибаешься. Не все процессорное время в ядре можно посчитать по техническим причинам. Учитывается в основном юзермодное.
Во‐первых, в диспетчере задач есть галочка «Показать время ядра». Так это это будет видно.
Во-вторых, любая активность процессора раз в N наносекунд сразу же нагрузит процессор с повышением его температуры и гудением вентилятора.

Цитата laser ()
тока зачем? Чтобы сэкономить 0.0001% процессорного времени? Смысл?
Действительно, зачем делать правильно, когда можно делать тяп‐ляп.

Цитата laser ()
Прога повиснет в ReceiveNetworkData до приема заданного числа байт. Загрузка проца нулевая.
Ну вот видите, эта функция блокирует GUI. Поэтому вы или запускаете отдельный поток, или переходите в неблокирующий режим. а неблокирующий режим каждые 100 миллисекунд вхолостую дёргает диспетчер потоков в винде. Данных нет, но программа всё равно 10 раз в секунду занимается бессмысленной работой, которую можно избежать.

Цитата laser ()
А вот с этим не соглашусь. Вероятно проверки есть в ядре. Ты не можешь на 100% это отрицать или видел код функции MsgWaitForMultipleObjectsEx и точно знаешь как она работает?
Любая Wait‐функция в конечном итоге останавливает поток. То есть поток удаляется из очереди запланированных к работе, менеджер потоков не тратит на него время и ресурсы.
 
laserДата: Пятница, 15.04.2022, 21:05 | Сообщение # 107
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: -46
Статус: Offline
Цитата haav ()
Людям-то на это пофиалетово. Они не ждут сборок или оф. релизов , просто берут и портируют FB туда , где они хотят его видеть и используют как захотят.
Скажи честно скока ты знаешь людей юзающих FB способных на такое?
На калибри был запущен простейший код, или проект с GUI, сетью, БД, и др.? В первом случае, практического смысла порта нет.

Цитата haav ()
Стащил и установил компиль с оф. сайта , установил geany , gdb наверное уже в системе.
Это нерациональный и трудозатратный метод. Сгодится тока если нужно раз собрать приложение. На постоянно совершенно не подходит.

Цитата zamabuvaraeu ()
Во‐первых, в диспетчере задач есть галочка «Показать время ядра».
Нету такого. Стандартный диспетчер? ОС? Ты на 100% уверен что учитывается все время, включая прерывания? Скорее всего тока время с низким IRQL когда код ядра выполняется в контексте потока приложения.

Цитата zamabuvaraeu ()
Во-вторых, любая активность процессора раз в N наносекунд сразу же нагрузит процессор
Я же писал что в PB (читай юзермод) проверка наличия данных занимает меньше микросекунды. В ядре понадобится еще меньше времени. Оттого проц не сильно грузит.

Цитата zamabuvaraeu ()
Действительно, зачем делать правильно, когда можно делать тяп‐ляп.
Ты наверно не видел кода написанного по принципу отъе**сь. Вот то треш полный. А в PB сеть устроена вполне логично учитывая кроссплатформу.
Ты до сих пор не показал кроссплатформенного примера с асинхронными сокетами!

Цитата zamabuvaraeu ()
Ну вот видите, эта функция блокирует GUI. Поэтому вы или запускаете отдельный поток
Для сети другой поток обязателен. Потому что могут быть разные причины остановки выполнения кода, MessageBox к примеру. И все, данные не приняты!
 
zamabuvaraeuДата: Суббота, 16.04.2022, 07:03 | Сообщение # 108
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Цитата laser ()
Я же писал что в PB (читай юзермод) проверка наличия данных занимает меньше микросекунды. В ядре понадобится еще меньше времени. Оттого проц не сильно грузит.
Объясните, зачем нужно писать плохой код с этими проверками, если можно написать хороший код без этих проверок?

Добавлено (16.04.2022, 07:08)
---------------------------------------------

Цитата zamabuvaraeu ()
Для сети другой поток обязателен. Потому что могут быть разные причины остановки выполнения кода, MessageBox к примеру. И все, данные не приняты!
То есть вы игнорируете мои ответы, что MsgWaitForMultipleObjectsEx не блокирует GUI.

Добавлено (16.04.2022, 07:11)
---------------------------------------------
У меня программа работает в однопоточном режиме. Модальные диалоговые окна вроде MessageBox не блокируют сеть. И без всяких проверок данных по таймеру.

 
laserДата: Суббота, 16.04.2022, 11:05 | Сообщение # 109
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: -46
Статус: Offline
Цитата zamabuvaraeu ()
зачем нужно писать плохой код
Код нормальный.
Если хочешь чтобы я признал его не оптимальным, покажи пример асинхронных сокетов для винды линя и мака.

Цитата zamabuvaraeu ()
То есть вы игнорируете мои ответы, что MsgWaitForMultipleObjectsEx не блокирует GUI.
Затормозить основной поток может что угодно. Буфер переполнится и часть данных потеряются. Удачи с таким подходом.

Цитата zamabuvaraeu ()
У меня программа работает в однопоточном режиме.
Многопоточные не пишешь или стабильная работа не нужна?
 
zamabuvaraeuДата: Воскресенье, 17.04.2022, 00:01 | Сообщение # 110
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Цитата laser ()
Код нормальный.Если хочешь чтобы я признал его не оптимальным
Любой код, который дёргает процессор вхолостую — неоптимальный. Что и требовалось доказать.

Цитата laser ()
Затормозить основной поток может что угодно
Это постоянно делает операционная система, когда переключает потоки. Ничего страшного от этого не происходит.

Цитата laser ()
Буфер переполнится
Не переполнится если правильно указывать его длину.

Цитата laser ()
Многопоточные не пишешь или стабильная работа не нужна?
Для сервера использую пул потоков.
 
zamabuvaraeuДата: Воскресенье, 17.04.2022, 17:28 | Сообщение # 111
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Оставлю это вам в качестве домашнего задания. Подсказка: копайте в сторону epoll().
 
zamabuvaraeuДата: Понедельник, 18.04.2022, 08:07 | Сообщение # 112
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Дошло до дела? Мне нет никакого дела до исправлений коммерческих продуктов.
 
zamabuvaraeuДата: Пятница, 22.04.2022, 04:49 | Сообщение # 113
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
laser, интересная у вас логика:

* если чего‐то нет (или вы не нашли) кроссплатформенного — это неправильно и применяться не должно;
* если что‐то не идёт с компилятором — это неправильно и применяться не должно
* гонять процессор вхолостую — это нормально

Мне нет никакого дела до решения за вас вашего домашнего задания для упомянутых вами линей и маков. И вам тоже нет до них дела, вы же говорили, что пишете исключительно под винду.
 
laserДата: Воскресенье, 24.04.2022, 20:21 | Сообщение # 114
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: -46
Статус: Offline
Цитата zamabuvaraeu ()
если чего‐то нет (или вы не нашли) кроссплатформенного — это неправильно и применяться не должно
Я такого не писал.
Ты прикопался к сетевой библе PB, аргументируя что она тратит много лишнего процессорного времени (0.7 микросекунд это очень много?), но совершенно не учитываешь что библа кроссплатформенная. Неужели не можешь понять что в библе PB наиболее оптимальный подход учитывая различия винды, линя и мака? Если не согласен - кроссплатформенную библу на асинхронных сокетах встудию!

Цитата zamabuvaraeu ()
если что‐то не идёт с компилятором — это неправильно и применяться не должно
Не нужно придумывать. Я не это писал и аргументировал свои ответы.

Цитата zamabuvaraeu ()
гонять процессор вхолостую — это нормально
Покажи библы на асинхронных сокетах для линя и мака. Тогда поговорим на эту тему.

Цитата zamabuvaraeu ()
Мне нет никакого дела до решения за вас
Я не просил что-то решать. Ты никак понять не можешь что подход винды не всегда годится на лине и маке, а функции библы должны быть идентичными для всех платформ.

Цитата zamabuvaraeu ()
И вам тоже нет до них дела, вы же говорили, что пишете исключительно под винду.
Большинство моих приложений для винды, но ты прикопался к библе PB, а она кроссплатформенная.
 
laserДата: Пятница, 23.12.2022, 18:37 | Сообщение # 115
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: -46
Статус: Offline
От администратора:

Насколько я помню , zamabuvaraeu держался в рамках обсуждения кодинга или около того и лично вас не цеплял. Вопросы его или еще чьих ориентаций оставим за рамками этого форума.
Что касается ваших прошлых постов в этом же духе , там у вас были обоюдные переходы на личности с DarkDemon , поэтому те посты оставил.
 
zamabuvaraeuДата: Понедельник, 26.12.2022, 19:56 | Сообщение # 116
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Вот что ещё обнаружил.

Про язык:

При выборе чисел оператор Select будет сравнивать только целые числа. А если вы подсунете ему Float, произойдёт обрезание дробной части.
Беззнаковые 64‐битные числа не поддерживаются.
Нельзя создать неинициализированную переменную.

Про IDE:

Несмотря на то, что IDE основана на том же движке, что и Notepad++ (а ведь Notepad++ всего лишь текстовый редактор с раскраской), она не умеет такую элементарную вещь, как одновременное отображение нескольких документов.
Средства отладчика вроде просмотра переменных лежат не во вкладках, а в отдельных плавающих окнах с флагом TopMost, которые постоянно загораживают код. Если вы решили переключиться на другое приложение по Alt+TAB, то эти окна будут загораживать ваши программы.
Когда вы набираете код, вам подсовывают всплывающий список с подсказками. Но выбрать из него списко по кнопке Enter нельзя, потому что для этой операции есть неочевидная горячая клавиша. Нужно идти в настройки и менять на общепринятое поведение.

Точки останова нельзя установить мышкой.
Точки останова не сохраняются между перезапусками IDE.
Отсутствует точка останова типа «точка ведения журнала». Вам придётся засорять код вставками Debug, чтобы вывести значение переменной в отладочное окно.
 
  • Страница 8 из 8
  • «
  • 1
  • 2
  • 6
  • 7
  • 8
Поиск: