Visual Basic 6.0 - Threads
Threads
RY>> Цель такая - например, по пикселю отрисовать 999999 пикселей.
RY>> Допустим, это займет 2-8 секунд. В это время программа должна
RY>> работать, как ни в чем не бывало, отрисовка идет на невидимом
RY>> фрейме. Через 10 секунд идет отрисовка результата.
AS> Схематично, я бы сделал так:
AS> Dim CS As Boolean
AS> Sub VeryLongSub
AS> Dim Pixel As Long
AS> If CS Then Exit Sub
AS> CS = True
AS> For Pixel = 1 To 999999
AS> Draw Pixel
AS> DoEvents
AS> Next Pixel
AS> CS = False
AS> End Sub
И как ее вызывать, чтобы паралельно заниматься другими делами?
AS> Даже и таймеры не нужны ;-)
AS> Можно, однако, и с ними:
AS> Dim Pixel As Long
AS> Sub VeryLongSub
AS> Pixel = 1
AS> Timer1.Enabled = True
AS> End Sub
AS> Sub Timer1_Timer
AS> Draw Pixel
AS> If Pixel = 999999 Then Timer1.Enabled = False
AS> Pixel = Pixel + 1
AS> End Sub
AS> Подходит?
Вот до этого я и сам додумался. Hо вот минимальный интервал таймера - 55 мс. Сколько будет для 999999 пикселей? :)
А если делать кучей - то какую кучу делать, чтобы и процессор не загружать (а они разные бывают), и выполнить быстрее. Вот что я и имел ввиду спросить. ;)
* Origin: 1134 (2:5045/44.13)
Какая кнопка нажата?
VB>>>> Public Function View() As Boolean
VB>>>> action = False
AS>>> ^^^ лишняя строчка
VB>> Привычка явно инициализировать переменные, не полагаясь на
VB>> умолчания, иногда позволяет сберечь много сил и нервов :)
AS> Почему нельзя полагаться на умолчания, если они тебя вполне
AS> устраивают? И как _повторная_ инициализация переменной _тем_же_
AS> значением сберегает силы? А привычка это что, у одного человека есть
AS> привычка писать в условии цикла "While Flag = True". Тоже сберегает
AS> силы, не полагаясь на умолчания?
Я так пишу. И первое, и второе. А помогает при портировании на VB 20XX, например, проекты для VB.NET тоже не любят, чтобы кто-то полагался на умолчания типа Label1 = "Text". Может, очередной суд обяжет делать все умолчания = True. Hу или компилятор для другой платформы может думать иначе.
Короче, я лучше компьютера знаю, что мне нужно держать в переменной. ;)
* Origin: 1134 (2:5045/44.13)
Как узнать заголовок активного окна?
IV> Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption
IV> текущего активного окна в системе (у которого фокус)?
GetActiveWindow
VB Declaration
Declare Function GetActiveWindow& Lib "user32" ()
Description
Obtains the handle of the active window.
Для текста - GetWindowText
* Origin: 1134 (2:5045/44.13)
Какая кнопка нажата?
AS> Имхо меньше сил уйдёт на запоминание _структуры_ (не деталей!)
AS> программы, чем на педантичную инициализацию уже инициализированного.
AS> Да и код быстрее работать будет. У VB есть определённые возможности,
AS> которых нет в других языках, и не использовать их - значит
AS> ограничивать себя. Меня всегда забавляет, когда в Class_Initialize
AS> обнуляются все локальные переменные, а в Class_Terminate сбрасываются
AS> в Nothing все объекты. Hу зачем это? _Совершенно_точно_, что никакой
AS> код не будет исполняться до Class_Initialize, и поэтому не испортит
AS> нулевые значения по умолчанию. И _совершенно_точно_, что после
AS> Class_Terminate ссылки на все объекты очистятся. Зачем это
AS> дублировать?
? а меня с детства учили выгружать формы так
Unload FormX
set FormX = Nothing
это глупость?
AS> Позволь спросить, может ты и в кинотеатр со своей табуреткой ходишь?
AS> Hе полагаясь на умолчание? :-)
Можно выскажусь? Большую часть своих похождений в кинотеатры я провел стоя. ;) [1988-1992 год, г. Артем] ;) И мне после этого полагаться на чьи то умолчания? :)
* Origin: 1134 (2:5045/44.13)
Re: Как узнать заголовок активного окна?
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "Ivan Vaneev"
<fido7.ru.visual.basic [@] talk.ru>to Ivan Vaneev on Sat, 10 Jul 2004 04:22:33
+0400:
IV>> Плиз, подскажите, как на эхотаге узнать хэндл или сразу caption
IV>> текущего активного окна в системе (у которого фокус)?
RY> GetActiveWindow
The GetActiveWindow function retrieves the window handle to the active
window _attached_to_the_calling_thread's_message_queue_.
Т.е. она возвращает активное окно в _своём_приложении_. А надо в _системе_.
Так что мимо :-Р
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Re: Какая кнопка нажата?
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
<fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Sat, 10 Jul 2004 04:20:05
+0400:
VB>>> Привычка явно инициализировать переменные, не полагаясь на
VB>>> умолчания, иногда позволяет сберечь много сил и нервов :)
AS>> Почему нельзя полагаться на умолчания, если они тебя вполне
AS>> устраивают? И как _повторная_ инициализация переменной _тем_же_
AS>> значением сберегает силы? А привычка это что, у одного человека есть
AS>> привычка писать в условии цикла "While Flag = True". Тоже сберегает
AS>> силы, не полагаясь на умолчания?
RY> Я так пишу. И первое, и второе. А помогает при портировании на VB 20XX,
RY> например, проекты для VB.NET тоже не любят, чтобы кто-то полагался на
RY> умолчания типа Label1 = "Text". Может, очередной суд обяжет делать все
RY> умолчания = True. Hу или компилятор для другой платформы может думать
RY> иначе.
RY> Короче, я лучше компьютера знаю, что мне нужно держать в переменной. ;)
Имхо пустая трата времени. Всё равно не предугадаешь, что они там в
следующей версии наворотят, и всё равно весь код придётся переписывать ;-)
Мне кажется более логичным с помощью VB6 писать именно на VB6, а не на
всех-языках-одновременно. Я никого не принуждаю, я высказываю свою точку
зрения.
AS>> ограничивать себя. Меня всегда забавляет, когда в Class_Initialize
AS>> обнуляются все локальные переменные, а в Class_Terminate сбрасываются
AS>> в Nothing все объекты. Hу зачем это? _Совершенно_точно_, что никакой
AS>> код не будет исполняться до Class_Initialize, и поэтому не испортит
AS>> нулевые значения по умолчанию. И _совершенно_точно_, что после
AS>> Class_Terminate ссылки на все объекты очистятся. Зачем это
AS>> дублировать?
RY> ? а меня с детства учили выгружать формы так
RY> Unload FormX
RY> set FormX = Nothing
RY> это глупость?
Только что проверил во всех контекстах, которые пришли в голову. _Всегда_
после Unload FormX дёргается и Form_Unload, и Form_Terminate, и если она
последняя, завершается приложение. Так что Set FormX = Nothing афаикт
лишнее. Глупость или не глупость писать бессмысленные строки - решай сам.
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Re: Threads
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
<fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Sat, 10 Jul 2004 04:16:15
+0400:
RY>>> Цель такая - например, по пикселю отрисовать 999999 пикселей.
RY>>> Допустим, это займет 2-8 секунд. В это время программа должна
RY>>> работать, как ни в чем не бывало, отрисовка идет на невидимом
RY>>> фрейме. Через 10 секунд идет отрисовка результата.
AS>> Схематично, я бы сделал так:
AS>> Dim CS As Boolean
AS>> Sub VeryLongSub
AS>> Dim Pixel As Long
AS>> If CS Then Exit Sub
AS>> CS = True
AS>> For Pixel = 1 To 999999
AS>> Draw Pixel
AS>> DoEvents
AS>> Next Pixel
AS>> CS = False
AS>> End Sub
RY> И как ее вызывать, чтобы паралельно заниматься другими делами?
Хм.
Call VeryLongSub
Другие дела - это что? События будут обрабатываться. Если хочешь
одновременно с этим запустить ещё что-то, тогда вешаешь на таймер то ещё
что-то и вызываешь VeryLongSub. Если то ещё что-то - тоже очень длинное,
тогда не знаю как, разве что через фиберы ;-)
AS>> Даже и таймеры не нужны ;-)
AS>> Можно, однако, и с ними:
AS>> Dim Pixel As Long
AS>> Sub VeryLongSub
AS>> Pixel = 1
AS>> Timer1.Enabled = True
AS>> End Sub
AS>> Sub Timer1_Timer
AS>> Draw Pixel
AS>> If Pixel = 999999 Then Timer1.Enabled = False
AS>> Pixel = Pixel + 1
AS>> End Sub
AS>> Подходит?
RY> Вот до этого я и сам додумался. Hо вот минимальный интервал таймера -
RY> 55 мс. Сколько будет для 999999 пикселей? :)
RY> А если делать кучей - то какую кучу делать, чтобы и процессор не
RY> загружать (а они разные бывают), и выполнить быстрее. Вот что я и имел
RY> ввиду спросить. ;)
Быстрее просто за счёт нитей не выйдет, вот что важно. А размер кучи можно
просто прикинуть, например сделать таймер с 110 мс и рисовать пикселы в
цикле, пока не пройдёт, скажем, 55 мс, а потом выходить из обработчика.
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Re: странное либо с ide либо с vb5sp3
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Roman!
You wrote in conference fido7.ru.visual.basic to "All"
<fido7.ru.visual.basic [@] talk.ru>to All on Sat, 10 Jul 2004 04:10:05 +0400:
RY> Конструкция If myfunction(myargument) = False then lalala1 else lalala2
RY> При возвращении false перескакивает на lalala2 :((
RY> В чем причина? Я из-за этого столько времени и нервов потратил. :(
RY> Конструкция If Not(myfunction(myargument)) then lalala1 else lalala2
RY> работает, как часы.
RY> ps. Это частный случай, раньше никогда такого не замечал, false
RY> возвращается совершенно однозначно, проверено дебагером.
myfunction() возвращает Boolean или Integer/Long?
Если второе, то там есть такая фишка, что (скажем) 1 - это True, и Not 1 -
тоже True, и закон логики (A And Not A) = False не выполняется ;-)
Если первое, тогда чёрт его знает; проверь в VB6 ;-)
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Re: Какая кнопка нажата?
From: Alexander Trishin <trialFORSPAM [@] trishin.com>
A. Skrobov wrote on Fri, 9 Jul 2004 21:07:35 +0000 (UTC):
> RY> ? а меня с детства учили выгружать формы так
> RY> Unload FormX
> RY> set FormX = Nothing
> RY> это глупость?
> Только что проверил во всех контекстах, которые пришли в голову. _Всегда_
> после Unload FormX дёргается и Form_Unload, и Form_Terminate, и если она
> последняя, завершается приложение. Так что Set FormX = Nothing афаикт
> лишнее. Глупость или не глупость писать бессмысленные строки - решай сам.
Hе знаю какие у тебя там контексты ;) Hо Terminate не вызовется после
Unload FormX. Соответственно все переменные, обьявленные на уровне формы
так и будут держать ссылки на объекты (например).
http://trishin.com/project.zip
--
AT
* Origin: Demos online service (2:5020/400)
Win 3.*
гTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT¬
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦LL=Привет вам, кибер-виртуалы!=--¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
L¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦-
DG> Hасколько я знаю, у винды 3 нет апи, значит только обpащениями к
Hу тебе уже все сказали, да? :)
[Киберпанки, всех стран - объединяйтесь!]-[(A'SC) 2,2k]-[VB6]-[SpiritNet]
* Origin: УТОМЛЁHHОЕ СОЛHЦЕвскими (2:5020/2013.74)