Современные решения

для защиты Windows приложений

и восстановления исходного кода

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)