Страница 1 из 1

Кол-во открытых потоков

Добавлено: 25 Сентябрь 2023, 8:02
Игорь Столяров
Привет всем !

Есть две задачи: определить текущее кол-во потоков в MDI приложении и их реальную доступность.
Первую задачу решаем через костыль:

Код: Выделить всё

TellAllChangeCurs  Routine
  Data
NextThread Long,Auto
Count      Long,Auto

  Code
  NextThread = Start(TmpThread,25000)
  Loop Count = 2 to (NextThread - 1)
    Post(Event:User + 27,,Count)
  end
Но неизвестно существует ли поток с указанным номером (MDI окно может быть уже закрыто)
Только если ожидать от него ответное событие ... целая история. :(

Может быть существуют более простые способы определения номеров работающих потоков в MDI приложении ?
Заранее спасибо ...

Кол-во открытых потоков

Добавлено: 25 Сентябрь 2023, 8:17
seawolf
А что мешает завести глобальную очередь в приложении и добавлять туда номера открываемых потоков ? При закрытии окна (потока) удалять из этой очереди текущий номер потока.

Кол-во открытых потоков

Добавлено: 25 Сентябрь 2023, 8:22
Игорь Столяров
seawolf писал(а): 25 Сентябрь 2023, 8:17 А что мешает завести глобальную очередь в приложении
Отсутствие желания работать в MDI приложении с QUEUE,STATIC :(

Кол-во открытых потоков

Добавлено: 25 Сентябрь 2023, 8:37
finsoftrz
У меня через глобальную очередь. Без неё вообще никак. :-) Например, выполняете функцию "закрыть все окна". А в каком-то потоке у нас открыта форма на редактирование с изменениями. Разумеется, надо такое проверить, отменить операцию и оповестить пользователя. И таких фишек кучка.

Кол-во открытых потоков

Добавлено: 25 Сентябрь 2023, 8:43
Игорь Столяров
finsoftrz писал(а): 25 Сентябрь 2023, 8:37 выполняете функцию "закрыть все окна"
В шаблонах ABC для этого есть штатный метод CleanCloseDown() ...

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

Кол-во открытых потоков

Добавлено: 25 Сентябрь 2023, 9:02
finsoftrz
Игорь Столяров писал(а): 25 Сентябрь 2023, 8:43
finsoftrz писал(а): 25 Сентябрь 2023, 8:37 выполняете функцию "закрыть все окна"
В шаблонах ABC для этого есть штатный метод CleanCloseDown() ...

Я понимаю, что решение с глобальным списком потоков вполне рабочее и мы его иногда даже юзаем
для блокировки повторного открытия одинаковых окон. Думал может есть ещё варианты ...
Сомневаюсь, что эта функция позволяет отследить факт изменения в формах. У меня ещё переключение потоков появилось задолго до mdi tab, которое тоже имеет ограниченный функционал. Имея глобальную очередь (точнее, две, одна для потоков, вторая для окон), можно несложно прицепить все что угодно.

Кол-во открытых потоков

Добавлено: 27 Сентябрь 2023, 9:41
Губин Игорь
Игорь Столяров писал(а): 25 Сентябрь 2023, 8:22 Отсутствие желания работать в MDI приложении с QUEUE,STATIC
Открою большой-пребольшой секрет. :facepalm: Если нет желания работать в такой ситуации с Queue :nono: , что, в общем-то, понятно, смотрите в сторону IMDD. Скорость такая же (на не запредельных размерах под гигабайт), все проблемы с обменом берёт на себя рантайм... :nr: