|
|
|
потоки
|
|||
|---|---|---|---|
|
#18+
Ситуация: Надо создать програму для считывания и управления процессом(технологическим). Думаю реализовать так: Поток №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 Заранее благодарен за советы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2006, 12:52 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
На первый взгляд, я бы сделал через очереди сообщений. Каждый массив отдать на растерзание какому-нибудь одному потоку, а они между собой через очередь перекидывались бы данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2006, 13:12 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
В принципе может так и сделаю использовав симофоры, может кто уже сталкивался с подобным и реализовал (знает "подводные камни"), или другой алгоритм роботы ; то я б с удовольствем выслушал мнение. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2006, 22:46 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
Занимался именно такими вещами, в свое время. Тебе нужно организовать стек, циклический. Указателей 2. Один на прочитанные данные, второй на отправленные в порт. Каждый порт/линия ( их может на порту быть сколько угодно) - поток умеющий писать и читать. Но! Пишут и читают они не в порт аппаратный, а в виртуальный - твой стек. А он уже пишет в аппаратный (опять же поток). И еще не забудь посмотреть про функции... ну типа InterlockedIncrement, далее по ссылкам, для управления указателями на стек. ICQ: 273353586 P.S И Рихтера почитай, внимательно. А на счет стека, в STL видел что-то очень хорошее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2006, 00:17 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
STL надо использовать, а именно очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 09:19 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
автор А на счет стека, в STL видел что-то очень хорошее. Скорее всего сделаю структуру {id int, value double,desk int} (stl мне не сильно нравиться по надёжности). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 09:43 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
MIsha_L автор А на счет стека, в STL видел что-то очень хорошее. Скорее всего сделаю структуру {id int, value double,desk int} (stl мне не сильно нравиться по надёжности). зря - все уже написано, а насчет надежности я вообще не понял - твоя поделка будет надежнее чем специально для этих целей разработанный шаблон? хм.. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 09:49 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
Не пойму. Чем гражданам не нравятся очереди сообщений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 09:52 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
ну я так понимаю причина 1 - не охота покопаться и разобраться как работает имеющийся функционал, поэтому кажется легче написать свой код в котором очень вероятны ошибки..но это только кажется, и такой подход неправильный.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 09:57 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
Да, был не прав, буду использовать stl (vactor,or Deque). авторЧем гражданам не нравятся очереди сообщений А потоки чем хуже (просто с очередями никогда толком не работал), так игрался и то давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 10:00 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
а никто не говорил что потоки не надо юзать.. для данной задачи можно использовать потоки но работать не с массивами и струкурами, а с queue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 10:03 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
MIsha_LА потоки чем хуже (просто с очередями никогда толком не работал), так игрался и то давно. Очереди - для передачи данных между потоками для синхронизации обращений к массивам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 10:06 |
|
||
|
потоки
|
|||
|---|---|---|---|
|
#18+
Всем огромное спасибо, таки буду использовать stl. Если у гого есть похожие заготовки и не жако поделиться то буду благодарен, если жалко буду писать сам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 10:26 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33826570&tid=2030910]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 518ms |

| 0 / 0 |
