Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Останов цикла Добавлено: 25.08.05 13:41  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
Вопрос: Есть основной цикл программы, внутри него проверяется определенное условие, если оно истинно - нужно приостановить работу цикла, но так чтобы меть возможность отрабатывать внешние события.
Конкретнее - приложение ActiveX.exe, оно многопоточно в принципе, отработка событий ведется параллельно с работой главного цикла.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #1 Добавлено: 25.08.05 14:16
А Exit Do или Exit For нельзя? Выйдешь из цикла, а когда надо запустишь.

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 25.08.05 18:26
:)) Можно в него вставить еще один цикл с DoEvents... А вообще если многопоточное все это дело, то Sleep должен тормознуть будет-лишь 1 поток, остальные будут работать...

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 26.08.05 13:34
Exit For не катит по простой причине - придется перестраивать всю логику работы приложения. Геморно.
DoEvents в активиксах работает ОЧЕНЬ нестабильно. Проще говоря, никакой гарантии что поток вообще из DoEvents вернется.
Дело то многопоточное, и Sleep как раз тормозит один поток, но остальные 10 до него достучаться не могут. Не реагирует он на события.
Тут такая тема - работает шлюз, один поток - парсер, 10 - сервер-укладчики.
Парсер, определяя что процесс использует слишком много памяти должен приостановиться, но продолжать выдавать данные укладчикам, и те, по мере сохранения, освобождают память. Но вот Sleep тормозит весь поток парсера. Лага в общем.

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 26.08.05 18:29
может таймером тормозить?


Private Sub Command1_Click()
Static c
If Timer1.Enabled = True Then c = c + 1: Timer1.Enabled = False
For i = c To 100
 c = i
 List1.AddItem i
    If i = 50 Then 'условие
    Timer1.Enabled = True: Exit For
    End If
Next i
End Sub

Private Sub Timer1_Timer() 'Определённый интервал
Command1_Click
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 vhash



Вопросов: 7
Ответов: 14
 Профиль | | #5 Добавлено: 27.08.05 19:52
Dim uslovie
Do While uslovie
DoEvents
WaitMessage
Loop

WaitMessage - ожидает сообщение в процесс, а пока его нет приостанавливает его.

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 29.08.05 12:09
WaitMessage саспендит поток а не процесс. Иначе на кой бы она тут :)
А вот с DoEvents, как я уже говорил, связываться не хочется - глюкавит частенько. Не могу я себе позволить такой роскоши :(

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам