Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#16: 2011-07-04 13:21:49 ЛС | профиль | цитата
[offtop]Леонид, коллега 1nd1g0 не любит реестр, он любит INI-файлы, но пользуется для работы с ними Ini и GVarContainer[/offtop]
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#17: 2011-07-04 13:26:01 ЛС | профиль | цитата
[offtop]
1nd1g0 писал(а):
коллега 1nd1g0 не любит реестр, он любит INI-файлы

Но использовать для таймера *.ini файл, это не комильфо. ИМХО
Писать каждую секунду данные в файл -- полный бред. Писать по выходу... может появиться ситуация, когда файл закроется нештатно, и данные уплывут. Тем и хорош реестр, что в него можно, и писать часто, и следить за ним не надо[/offtop]
карма: 22

0
Ответов: 3889
Рейтинг: 362
#18: 2011-07-04 13:52:08 ЛС | профиль | цитата
"Долгожданная" версия с реестром (см. ниже)

карма: 1

0
Ответов: 8928
Рейтинг: 823
#19: 2011-07-04 14:00:05 ЛС | профиль | цитата
1nd1g0, тоже ненавижу программы прописывающие себя везде и решающие за меня, что мне нужно, особенно Win7, блин
карма: 19

0
Ответов: 3889
Рейтинг: 362
#20: 2011-07-04 14:05:46 ЛС | профиль | цитата
Ой, не заметил избыточности
------------ Дoбавленo в 14.05:
Вариант с реестром, подчищающий после себя ключ.

Add(ChildPanel,342224,294,168)
{
link(onEvent1,2412780:doCaption,[(334,174)(334,146)(201,146)(201,160)])
link(onEvent2,2412780:doClose,[(335,181)(335,209)(201,209)(201,181)])
}
BEGIN_SDK
Add(EditMulti,13488098,21,21)
{
EventCount=2
WorkCount=1
Width=748
Height=319
link(doWork1,10451664:doWork2,[(45,27)(45,164)])
}
Add(Panel,10123606,119,98)
{
Width=392
Height=31
Align=2
Point(doVisible)
}
Add(Edit,11466551,308,98)
{
Left=195
Top=5
Width=30
Text="0"
DataType=2
Point(doSetFocus)
Point(doSelectAll)
link(onEnter,10286314:doCalc,[])
}
Add(Edit,9028684,238,98)
{
Left=145
Top=5
Width=25
Text="0"
DataType=2
Point(doSetFocus)
Point(doSelectAll)
link(onEnter,9500015:doEvent1,[(275,111)(275,118)])
}
Add(Edit,32538,168,105)
{
Left=90
Top=5
Width=30
Text="0"
DataType=2
Point(doSetFocus)
link(onEnter,16524335:doEvent1,[])
}
Add(Label,16602133,175,42)
{
Left=5
Top=5
Width=80
Caption="Закрыть через"
}
Add(Label,1783742,217,42)
{
Left=120
Top=5
Width=25
Caption="час"
}
Add(Label,155614,266,42)
{
Left=170
Top=5
Width=25
Caption="мин"
}
Add(Label,8390051,315,42)
{
Left=225
Top=5
Width=25
Caption="сек"
}
Add(Hub,16524335,210,112)
{
link(onEvent1,9028684:doSetFocus,[])
link(onEvent2,9028684:doSelectAll,[])
}
Add(Hub,9500015,280,112)
{
link(onEvent1,11466551:doSetFocus,[])
link(onEvent2,11466551:doSelectAll,[])
}
Add(Time,8795715,532,231)
{
Point(DateTime)
}
Add(MathParse,10286314,357,105)
{
DataCount=4
MathStr="%1 + %2/24 + %3/1440 + %4/86400"
link(onResult,6119088:doEvent1,[])
link(X1,9296710:Var1,[(363,97)(393,97)(393,271)])
link(X2,32538:Text,[(370,91)(352,91)(352,148)(174,148)])
link(X3,9028684:Text,[(377,87)(347,87)(347,145)(244,145)])
link(X4,11466551:Text,[(384,84)(343,84)(343,142)(314,142)])
}
Add(GetDataEx,9296710,539,266)
{
link(Data,8795715:DateTime,[])
}
Add(Hub,6119088,399,105)
{
OutCount=3
link(onEvent1,5309022:doWork1,[(571,111)])
link(onEvent2,10028357:doWrite,[(448,118)(448,132)])
link(onEvent3,10451664:doWork1,[(434,125)])
}
Add(If_else,6648493,504,175)
{
Type=5
Op2=Real(0)
link(onTrue,12494487:doEvent1,[])
link(onFalse,10836403:doWork2,[(541,188)(541,215)(65,215)(65,118)])
}
Add(ChanelToIndex,10836403,77,105)
{
link(onIndex,10123606:doVisible,[])
}
Add(Hub,12494487,546,175)
{
link(onEvent1,5309022:doWork2,[])
link(onEvent2,10836403:doWork1,[(568,188)(568,219)(59,219)(59,111)])
}
Add(Memory,10954717,581,175)
{
Default=Real(0)
}
Add(HubEx,5309022,567,175)
{
link(onEvent,10954717:doValue,[])
}
Add(Timer,12680090,490,287)
{
link(onTimer,6074697:doCalc,[])
}
Add(MathParse,6074697,539,287)
{
MathStr="(%2 - %1)*86400"
ResultType=0
link(onResult,11600711:doCompare,[])
link(X1,9296710:Var2,[])
link(X2,10954717:Value,[(552,271)(587,271)])
}
Add(If_else,11600711,581,287)
{
Type=2
Op2=Integer(0)
link(onTrue,5523744:doString,[(621,293)(621,237)])
link(onFalse,13519132:doEvent1,[])
}
Add(FormatStr,5523744,630,231)
{
DataCount=1
Mask="До закрытия осталось %1 сек"
link(onFString,13488098:onEvent1,[(671,237)(671,27)])
}
Add(Registry,10028357,490,119)
{
@Hint=#8:RegWrite|
HKey=1
Key="SoftwareTimeBombBoomTime"
Value="boom"
DataType=2
AddHint(-39,-41,60,13,@Hint)
}
Add(Registry,16218840,455,175)
{
HKey=1
Key="SoftwareTimeBombBoomTime"
Value="boom"
DataType=2
Point(doExistsValue)
link(onRead,6648493:doCompare,[])
}
Add(Registry,15011602,672,280)
{
HKey=1
Key="SoftwareTimeBombBoomTime"
Value="boom"
DataType=2
Point(doDeleteKey)
}
Add(Hub,13519132,623,294)
{
link(onEvent1,15011602:doDeleteKey,[])
link(onEvent2,13488098:onEvent2,[(738,307)(738,34)])
}
Add(HubEx,10451664,430,158)
{
Angle=1
link(onEvent,16218840:doRead,[(434,181)])
}
END_SDK
Add(MainForm,2412780,210,154)
{
Position=1
Point(onClose)
link(onCreate,342224:doWork1,[])
}


карма: 1

0
Ответов: 16884
Рейтинг: 1239
#21: 2011-07-04 16:37:57 ЛС | профиль | цитата
nesco писал(а):
Писать каждую секунду данные в файл -- полный бред. Писать по выходу... может появиться ситуация, когда файл закроется нештатно, и данные уплывут. Тем и хорош реестр, что в него можно, и писать часто, и следить за ним не надо
реестр - тот же файл (вернее несколько файлов) и писать в него каждую секунду то-же что и писать в ini. 1:1.
1nd1g0 писал(а):
Вариант с реестром, подчищающий после себя ключ.
1nd1g0, спасло тебя от минуса только то, что я дал зарок минусов не ставить.
------------ Дoбавленo в 16.37:
А интересно, pavleg знает что в Windows есть "Планировщик заданий" ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#22: 2011-07-04 16:52:06 ЛС | профиль | цитата
Tad, запись в реестр производится всего дважды, первый раз - при задании времени. Второй - после срабатывания по назначенному времени - ключ удаляется чтобы не мусорить (первое правило хорошего программиста) и не мешать последующим запускам программы. Я был против реестра, меня трижды попросили, прежде чем я сделал, отстань уже от меня со своими виртуальными минусами. Сам я их тоже принципиально никому ни разу не ставил, но и не угрожал, тем более - необдуманно.
Tad писал(а):
реестр - тот же файл (вернее несколько файлов) и писать в него каждую секунду то-же что и писать в ini. 1:1.

AFAIK, Реестр - это в первую очередь эффективная база данных с предкэшированием в оперативной памяти с отложенной записью. Запись происходит только в безопасных (по мнению системы) ситуациях спада активности, а наиболее критичные места - попадают на диск только при завершении работы. Хотя на чтение мелкие файлы также кэшируются, частая запись в мелкий файл должна значительно проигрывать записи в реестр, хотя бы из-за особенностей работы (особенно - журналирования) файловой системы.

Но я повторю ещё раз для тех, кто не привык тратить время на много буков в постах раньше, в программе Леонида была всего одна запись в файл, в моей доработке - всего одна запись в реестр и одно стирание мусорного ключа при закрытии программы. Это - за весь цикл работы. Так что nesco тоже не до конца убедителен, тут реестр оправдывает только вероятность запрета на запись в ini-файл в той же папке системой или проактивной защитой. Т.к. такое бывает, и гадить файлом во временную директорию не многим лучше, реестр я таки сделал.
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#23: 2011-07-04 18:14:34 ЛС | профиль | цитата
1nd1g0 писал(а):
Так что nesco тоже не до конца убедителен, тут реестр оправдывает только вероятность запрета на запись в ini-файл в той же папке системой или проактивной защитой. Т.к. такое бывает, и гадить файлом во временную директорию не многим лучше, реестр я таки сделал

Нельзя забывать и о том, что запись каждую секунуду в файл, пусть и временный, чревато дефрагментацией диска. Писать во временный файл очень даже можно, если он находится на виртуальном RAM диске, это самый наилучший вариант. ИМХО
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#24: 2011-07-04 18:26:09 ЛС | профиль | цитата
1nd1g0, зря ты
1nd1g0 писал(а):
отстань уже от меня со своими виртуальными минусами.

1. При запуске программы фокус на Edit-секунды. Можешь сказать, что так и было задумано.
2. Переход с Edit на Edit по Enter и запуск по Enter на Edit-секунды. Но так как Edit.ClearAfterEnter=True, то MathParse ничего не остаётся как %1 + %2/24 + %3/1440 + %4/86400 сложить текущее время+0+0+%4/86400
3. Совсем не обязательно ставить 3-и компонента Registry. Можно обойтись и одним.
4. Могу продолжить и дальше. Надо ???
Первых два пункта - глюк Леонида, но так как ты их использовал, то досталось тебе.
Как правильно заметил nesco - не любишь ты критики.
По поводу
1nd1g0 писал(а):
Реестр - это в первую очередь эффективная база данных
это просто игра слов - любой файл это база данных.
А вообще-то РЕЕСТР - это чисто абстрактное понятие. Нет его, как такового, в природе. Только в памяти.
В каталоге,например, C:WindowsSystem32Config имеются файлы
system, software, sam, security, default
Все файлы без расширений. Копия этих файлов хранится отдельно.
Кроме того, файлы, используемые при построении «рабочей версии» реестра, могут храниться в каталогах:
Documents and Settings<Username> — файл «Ntuser.dat»
Documents and Settings<Username>Local SettingsApplication DataMicrosoftWindows — файл «UsrClass.dat»
И ещё может быть куча файлов.
Когда запускают regedit, то то, что запустивший видит на экране, формируется из этих файлов. Все эти файлы,
насколько мне известно, обыкновенные типированные файлы. Т.е. их можно вполне назвать и БД

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:ser_davkin
Ответов: 16884
Рейтинг: 1239
#25: 2011-07-05 19:29:31 ЛС | профиль | цитата
На суд
worktimer.rar

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1worktimer.rar [1.3KB] [95]
Ответов: 8928
Рейтинг: 823
#26: 2011-07-05 20:24:00 ЛС | профиль | цитата
Tad,
карма: 19

0
Ответов: 4641
Рейтинг: 334
#27: 2011-07-05 20:27:52 ЛС | профиль | цитата
pavleg писал(а):
нужен таймер который будет отсчитывать заданное колво времени
только забыли указать, на сколько точный должен быть таймер. А это главный вопрос в этой теме. Толи каждую секунду писать куда то, толи минуту или час. Есть разница.
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 16884
Рейтинг: 1239
#28: 2011-07-05 21:46:18 ЛС | профиль | цитата
Ravilr писал(а):
Толи каждую секунду писать куда то, толи минуту или час. Есть разница.
а я что пишу каждую секунду?Запись идет только один раз по нажатию кнопки Старт.
Леонид, чаво ? подробней можно ?
------------ Дoбавленo в 21.46:
nesco, вопрос как к Автору компонента: Подскажи, как увеличить высоту окна
Add(MainForm,2953706,21,105)
{
Width=208
Height=91
}
Add(DatePicker,15334719,77,105)
{
Left=15
Top=15
Width=120
Height=21
Font=[MS Sans Serif,14,1,0,1]
DateMode=1
Time=0
}


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8928
Рейтинг: 823
#29: 2011-07-05 22:08:14 ЛС | профиль | цитата
Tad, через секунду после "Старт" поле обнуляется и более ничего не происходит
карма: 19

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#30: 2011-07-05 22:09:56 ЛС | профиль | цитата
Tad писал(а):
как увеличить высоту окна

Тю! Тебя что, класс Combo в редакторе сбил с толку

code_24557.txt

А вот в редакторе, увы -- никак
карма: 22

0
файлы: 1code_24557.txt [205B] [116]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)