|
|
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
Привет. Есть форма, которая ожидает поступления данных с СОМ порта: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Цикл DO крутиться, пока в переменную str_read не попадут данные с СОМ порта. Я хочу сделать на форме кнопку Отмена для того, чтобы ею можно было остановить процесс ожидания данных и закрыть форму. В событии Click кнопки Отмена пишу: thisform.Release() но это не помогает. Цикл все равно продолжает выполняться. Есть идея применить флаг, при поднятии которого кнопкой Отмена цикл останавливается. Но есть ли еще варианты решения? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 16:55 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. заведите у формы свойство lCansel поумолч= .f. и по клику кнопки присваивайте = .t. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 17:15 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
и read events меня Ваш настораживает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 17:17 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
alex11100и read events меня Ваш настораживает Без него не получается даже нажать на кнопку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 09:02 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
DDT alex11100и read events меня Ваш настораживает Без него не получается даже нажать на кнопку. Попробуйте вместо него DOEVENTS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 09:10 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
Я бы использовал для выхода из цикла взведение флага. И выходил бы из цикла по команде EXIT. Примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. ---------------------------------------------- Кто в армии служил - тот в цирке не смеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 09:23 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
alex11100 заведите у формы свойство lCansel поумолч= .f. и по клику кнопки присваивайте = .t. Сделал вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Как только попадает в цикл, так даже при lContinue = .f. из него (цикла) уже не выходит. Может существует какой-нибудь аналог оператора break? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 09:54 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
А в каком событии вызывается цикл если в событии формы то никакое нажатие кнопок е его не прекратит т.к. событие не будет закончено. Может стоит воспользоваться таймером такие циклы должны исполнятся в другом потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 10:40 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
ну у Вас на read events останавливается я как-то не понял зачем он там нужен по на жатию кнопки еще сделайте clea event ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 11:14 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
Пока из цыкла не выйдешь, на на кнопку не нажмешь. Фокс однопоточная система. Здесь только один выход -- таймер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 11:43 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
А зачем открывать Com порт таким образом, для этого существует компонент MSComm и в нём есть событие, которое срабатывает при приёме данных с порта. И не нужны никакие циклы и даже таймеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:29 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
А зачем открывать Com порт таким образом, для этого существует компонент MSComm и в нём есть событие, которое срабатывает при приёме данных с порта. И не нужны никакие циклы и даже таймеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:31 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
__Владимир__А зачем открывать Com порт таким образом, для этого существует компонент MSComm и в нём есть событие, которое срабатывает при приёме данных с порта. И не нужны никакие циклы и даже таймеры. Дело не в том как принимать данные из com порта, а как прервать цикл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:37 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
авторБез него не получается даже нажать на кнопку. так отслживание событий нужно включить после вызова формы а не в цикле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 12:53 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
m.a.v __Владимир__А зачем открывать Com порт таким образом, для этого существует компонент MSComm и в нём есть событие, которое срабатывает при приёме данных с порта. И не нужны никакие циклы и даже таймеры. Дело не в том как принимать данные из com порта, а как прервать цикл. Во первых не нужно делать бесконечных циклов. Во вторых нужно использовать не READ EVENTS а DOEVENTS тогда кнопки будут нажиматься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:27 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
И ещё как ведёт себя команда FREAD( hComPort,10) ? Если она ждёт 10 байт из порта, то цикл и не продолжается. Если она не ждёт этих 10-и байт а возвращает меньше, то какой смысл в команде str_read = SUBSTR(FREAD( hComPort,10), 2, 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 13:36 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
__Владимир__ Если она не ждёт этих 10-и байт а возвращает меньше, то какой смысл в команде str_read = SUBSTR(FREAD( hComPort,10), 2, 8) Так, постараюсь резюмировать танные советы. Задача заключается в том, чтобы получить из порта строчку длинной 10 символов, но нужна не вся строка, а лишь 8 символов. Как видно из моего примера, опыта работы с Фоксом у меня не много, поэтому прошу пояснить в чем принципиальное отличие READ EVENTS от DOEVENTS. P.S. f1 уже смотрел, туда не посылайте :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 15:16 |
|
||
|
Как прервать цикл?
|
|||
|---|---|---|---|
|
#18+
в приведенном выше примере заменил READ EVENTS на DOEVENTS: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Помогло. Спасибо. Хочеться теперь понять почему помогло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2006, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33608394&tid=1592107]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 486ms |

| 0 / 0 |
