powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / потоки
14 сообщений из 14, страница 1 из 1
потоки
    #33824034
MIsha_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация:
Надо создать програму для считывания и управления процессом(технологическим).
Думаю реализовать так:
Поток №1 – считывание данных из датчиков, анализ информации отправка сигналов на управление.
№ 2 – отправка показаний приборов пользователям.
№ 3 – прием команд от пользователей на изменение параметров для автоматической регулировки.
№ 4 – запись истории (FireBird).
Метод реализации:
все значения приборов записуются и постоянно обновляютса в масиве №1
затем масив копируется в масив № 2 для отправки значений пользователям, а также в масив № 4 для записи истории. Все значения для автоматической регулировки находятся в масиве № 3 и могут изменятся только из потока № 3.
Вопрос: что лучше использовать для синхронизированой работы Mutex, CriticalSection, semaphore,... и как.
Среда Windows2000, C++ (Borland C builder).
Думаю сделать так:
Поток № 1
WaitForSingleObject № 1
Запись данных в масив № 1
ExitSingleObject № 1

WaitForSingleObject № 2
Запись данных в масив № 2 из масива № 1
ExitSingleObject № 2

WaitForSingleObject № 4
Запись данных в масив № 4 из масива № 1
ExitSingleObject № 4

WaitForSingleObject № 3
Чтение регулировачных значений из масива № 3
вычисления отправка данных приборам
ExitSingleObject № 3

Поток № 2
WaitForSingleObject № 2
отправка данных из масив № 2 пользователям (TCPIP)
ExitSingleObject № 2

Поток № 3
прием нових регулирующих данных от пльзователей (TCPIP)
WaitForSingleObject № 3
запись в масив №3
ExitSingleObject № 3

Поток № 4
WaitForSingleObject № 4
запись Из масива №4 в базу исории
ExitSingleObject № 4

Никогда раньше с такой проблемой не сталкивался может я перемудрил или можно сделать проще, режым роботы системы 24х7

Заранее благодарен за советы
...
Рейтинг: 0 / 0
потоки
    #33824116
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На первый взгляд, я бы сделал через очереди сообщений. Каждый массив отдать на растерзание какому-нибудь одному потоку, а они между собой через очередь перекидывались бы данными.
...
Рейтинг: 0 / 0
потоки
    #33825438
MIsha_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе может так и сделаю использовав симофоры, может кто уже сталкивался с подобным и реализовал (знает "подводные камни"), или другой алгоритм роботы ; то я б с удовольствем выслушал мнение.
Спасибо
...
Рейтинг: 0 / 0
потоки
    #33825986
Alexey-M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Занимался именно такими вещами, в свое время.

Тебе нужно организовать стек, циклический. Указателей 2. Один на прочитанные данные, второй на отправленные в порт. Каждый порт/линия ( их может на порту быть сколько угодно) - поток умеющий писать и читать. Но! Пишут и читают они не в порт аппаратный, а в виртуальный - твой стек. А он уже пишет в аппаратный (опять же поток). И еще не забудь посмотреть про функции... ну типа InterlockedIncrement, далее по ссылкам, для управления указателями на стек.

ICQ: 273353586

P.S И Рихтера почитай, внимательно. А на счет стека, в STL видел что-то очень хорошее.
...
Рейтинг: 0 / 0
потоки
    #33826518
Dirty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
STL надо использовать, а именно очереди
...
Рейтинг: 0 / 0
потоки
    #33826554
MIsha_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор А на счет стека, в STL видел что-то очень хорошее.
Скорее всего сделаю структуру
{id int, value double,desk int}
(stl мне не сильно нравиться по надёжности).
...
Рейтинг: 0 / 0
потоки
    #33826565
Dirty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MIsha_L автор А на счет стека, в STL видел что-то очень хорошее.
Скорее всего сделаю структуру
{id int, value double,desk int}
(stl мне не сильно нравиться по надёжности).

зря - все уже написано, а насчет надежности я вообще не понял - твоя поделка будет надежнее чем специально для этих целей разработанный шаблон? хм.. :)
...
Рейтинг: 0 / 0
потоки
    #33826570
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму. Чем гражданам не нравятся очереди сообщений
...
Рейтинг: 0 / 0
потоки
    #33826577
Dirty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну я так понимаю причина 1 - не охота покопаться и разобраться как работает имеющийся функционал, поэтому кажется легче написать свой код в котором очень вероятны ошибки..но это только кажется, и такой подход неправильный..
...
Рейтинг: 0 / 0
потоки
    #33826590
MIsha_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, был не прав, буду использовать stl (vactor,or Deque).
авторЧем гражданам не нравятся очереди сообщений
А потоки чем хуже (просто с очередями никогда толком не работал), так игрался и то давно.
...
Рейтинг: 0 / 0
потоки
    #33826597
Dirty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а никто не говорил что потоки не надо юзать..
для данной задачи можно использовать потоки но работать не с массивами и струкурами, а с queue
...
Рейтинг: 0 / 0
потоки
    #33826609
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MIsha_LА потоки чем хуже (просто с очередями никогда толком не работал), так игрался и то давно.

Очереди - для передачи данных между потоками для синхронизации обращений к массивам.
...
Рейтинг: 0 / 0
потоки
    #33826656
MIsha_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо, таки буду использовать stl.
Если у гого есть похожие заготовки и не жако поделиться то буду благодарен,
если жалко буду писать сам :)
...
Рейтинг: 0 / 0
потоки
    #33826665
Dirty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рабочий примерчик есть но на с#..боюсь не подойдет
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / потоки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]