|
|
|
Синхронизация
|
|||
|---|---|---|---|
|
#18+
Доброе время суток ! Господа, просвятите плиз по следующему вопросу: Есть у меня компонента, которая может писать в порт данные и читать из порта данные. На порту висит адаптер, имеет 4 линии. Переводит цифры в аналог в соответсвии с сигнализации линии к которой подключен. Линии связи не старндартные, что не суть важно. Важно следующее. Кто-то, а именно мои клиенты этой комопнненты могут одновременно попытаться записать в порт данные. Сделал буфер. Пишу данные для отправки в буфер, поток читает. Буфер организован так : volatile long o_pW; // Для буфера данных указатель на записываемую строку volatile long o_pR; // Для буфера данных указатель на читаемую в порт строку BYTE szWriteBuffer[250][132]; //сам собственно говоря буфер HANDLE hWriter; // Хендл для события о появлении данных для записи в HANDLE hRunning; // Событие о нормальном выполнении команды, можно дальше писать Чтение и запись бефера циклические, тоесть если o_pR или o_pW равны 250 то на на начало буфера o_pW или o_pR установить в 0. Признак пустого буфера o_pW = o_pR. Запись: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь запись в порт : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Вопросы следующие: 1. Как мне сихронизировать индексы записи и чтения ? Тоесть как мне достоверно знать что что лежит в o_PW и o_RW ? Ведь во время чтения или записи индекс может изменяться в одном потоке , а во втором проверяться что там лежит. Как быть ? 2. Как сихронизировать сообщения к клиенту. Допустим есть таких компонент 4..5..., а клиент 1. И все они должны вернуть прочитанные из порта данные ему ? Буду признателен за ответы ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 10:44 |
|
||
|
Синхронизация
|
|||
|---|---|---|---|
|
#18+
1. Ну в таких случаях вроде полагается использовать mutex, т.е. для предотвращения одновременного доступа к объекту из разных потоков. 2. Пусть клиент регулярно опрашивает компоненты на предмет появления новыех данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 10:55 |
|
||
|
Синхронизация
|
|||
|---|---|---|---|
|
#18+
1. А критические секции не прокатят ? 2. У меня компонента сама при появлении данных выполняет метод клиента, и что делать если из портов из 5 портов одновременно щимятся данные ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 11:15 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32618212&tid=2034629]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 301ms |

| 0 / 0 |
