On-line: гостей 3. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 59
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 04.06.08 13:35. Заголовок: HELP me !!!


Есть несколько проблем:
1- я никогда не делал "серверных" прог;
1а- вытекает из первой - ---
есть в трее 3 таймера, что будет, если они сойдутся во времени ? Timer_1, Timer_2, Timer_3 соответственно могут пресечся, периоды у них - (могут меняться) - 12 часов, 3 часа, 0.5 часа. Стартуют одновременно. Что произойдет, если каждый выполняет довольно длительные по времени действия?( и, судя по всему, жрет ресурсы)?
2а- они используют некоторые общие базы с разными целями (одни просто читают, но, все- сверху-вниз и неоднократно, другие еще пишут)
2-я как определить - открыта именно КОНКРЕТНАЯ база, или нет ?
Очень прошу прощения за безграмотность в прог-нии. Самому попробовать(методом научного тыка) времени нет- поджимает. Может кто-нибудь уже делал такое?
3-я если остановить таймер, он продолжит выполнение(после Form_n.timer_n.enabled:=.t.) с остановленной позиции функции в проге и счетчик таймера продолжается, или все сначала?
В общем - сразу СПАСИБО всем откликнувшимся!!!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 14 [только новые]





Пост N: 60
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 04.06.08 14:15. Заголовок: Ну очень нужно ... ..


Ну очень нужно ...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 61
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 04.06.08 14:33. Заголовок: Пожалуйста.........


Пожалуйста........

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 04.06.08 15:33. Заголовок: признаться, не очень..


признаться, не очень понял задачу

Спасибо: 0 
Цитата Ответить



Пост N: 62
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 04.06.08 15:53. Заголовок: Согласен, не очень ..


Согласен, не очень внятно.
1. Беспокоит больше всего, если время вызовов функций 2-х или 3-х таймеров пересечется. Что произойдет, какие приоритеты у этих функций, не будет ли сброса из проги, или я напрасно беспокоюсь?
2. это отпадает - глупость.
3. немного попозже, после 1-го пункта.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 04.06.08 16:13. Заголовок: так, еще раз(глядишь..


так, еще раз(глядишь еще пункт уберем). Какие функции, чего вызывают, кто на сервере, кто на станции ?

Спасибо: 0 
Цитата Ответить



Пост N: 63
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 17.06.08 15:20. Заголовок: В общем, суть пробл..


В общем, суть проблеммы в следующем. Загоняю прогу в трей. В ней определены 3 таймера:
 цитата:
DEFINE TIMER Timer_1 OF Form_0 INTERVAL rr1 ACTION proc1()


DEFINE TIMER Timer_2 OF Form_0 INTERVAL rr2 ACTION proc2()


DEFINE TIMER Timer_3 OF Form_0 INTERVAL rr3 ACTION proc3()

Где, соответственно ( например ) rr1:= 10 мин (10*60*1000), rr2:=5 мин , rr3:=3 мин
Каждая proc отрабатывает где-то минуту ( пробовал по- отдельности). При определении всех вместе, отрабатывает только proc3() ( с наименьшим периодом). Остольные молчат - хоть убей. Что не так? Как вообще срабатывают таймеры? Ничего не понимаю!

Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост N: 799
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 17.06.08 16:19. Заголовок: valery2 пишет: Как ..


valery2 пишет:

 цитата:
Как вообще срабатывают таймеры?


Почитай о таймерах здесь:
http://decoding.narod.ru/api/timer/timer.html

valery2 пишет:

 цитата:
rr1:= 10 мин (10*60*1000), rr2:=5 мин , rr3:=3 мин


Не рекомендуется использовать таймеры с интервалом опроса более 60000 (т.е. 1 минута)

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 17.06.08 17:05. Заголовок: У меня впечатле, что..


У меня впечатле, что нельзя запусть больше одного таймера одновременно. По моему проще написать обработку какого-либо события, по нему стопорить тамер для одной процы и пускать для другой. В какой-то проге я это делал по смене окна в котором находился пользователь

Спасибо: 0 
Цитата Ответить



Пост N: 55
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 18.06.08 05:05. Заголовок: fil пишет: У меня в..


fil пишет:

 цитата:
У меня впечатле, что нельзя запусть больше одного таймера одновременно.



простой тестовый пример показывает что это неверно.

файл timer_test.prg
#include <minigui.ch>
function Main()
load window wMain
center window wMain
wMain.Timer_1.Enabled:=.f.
wMain.btn_Stop1.Enabled:=.f.
wMain.Timer_2.Enabled:=.f.
wMain.btn_Stop2.Enabled:=.f.
activate window wMain
return //Main

файл wMain.fmg
DEFINE WINDOW TEMPLATE AT 172,382 HEIGHT 374 WIDTH 550 TITLE "Timers Test" ICON "" MAIN CURSOR "" FONT "Arial" SIZE 9

DEFINE FRAME FRAME_1
ID Nil
COL 19
ROW 19
CAPTION "Timer1"
WIDTH 501
HEIGHT 81
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
BACKCOLOR Nil
FONTCOLOR Nil
OPAQUE .F.
TRANSPARENT .F.
END FRAME

DEFINE BUTTON btn_Start1
COL 80
ROW 40
WIDTH 100
HEIGHT 24
CAPTION "Start"
PICTURE Nil
ICON Nil
ACTION {||wMain.Timer_1.Enabled:=.t., wMain.btn_Stop1.Enabled:=.t., wMain.btn_Start1.Enabled:=.f.}
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
FONTCOLOR Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
HELPID Nil
FLAT .F.
TABSTOP .T.
TRANSPARENT .F.
TOOLTIP Nil
VISIBLE .T.
DEFAULT .F.
END BUTTON

DEFINE BUTTON btn_Stop1
COL 80
ROW 70
WIDTH 100
HEIGHT 24
CAPTION "Stop"
PICTURE Nil
ICON Nil
ACTION {||wMain.Timer_1.Enabled:=.f., wMain.btn_Stop1.Enabled:=.f., wMain.btn_Start1.Enabled:=.t.}
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
FONTCOLOR Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
HELPID Nil
FLAT .F.
TABSTOP .T.
TRANSPARENT .F.
TOOLTIP Nil
VISIBLE .T.
DEFAULT .F.
END BUTTON

DEFINE LABEL LABEL_1
COL 190
ROW 40
VALUE "Period(mSec) = 1000"
ACTION Nil
WIDTH 140
HEIGHT 20
AUTOSIZE .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
BORDER .f.
CLIENTEDGE .f.
HSCROLL .f.
VSCROLL .f.
TRANSPARENT .F.
HELPID Nil
VISIBLE .T.
END LABEL

DEFINE LABEL LABEL_2
COL 300
ROW 70
VALUE "Result"
ACTION Nil
WIDTH 100
HEIGHT 20
AUTOSIZE .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
BORDER .f.
CLIENTEDGE .f.
HSCROLL .f.
VSCROLL .f.
TRANSPARENT .F.
RIGHTALIGN .T.
HELPID Nil
VISIBLE .T.
END LABEL

DEFINE TEXTBOX txt_Result1
COL 410
ROW 70
WIDTH 100
HEIGHT 20
VALUE Nil
READONLY .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
PASSWORD .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
INPUTMASK Nil
FORMAT Nil
MAXLENGTH Nil
UPPERCASE .F.
LOWERCASE .F.
ONGOTFOCUS Nil
ONCHANGE Nil
ONLOSTFOCUS Nil
ONENTER Nil
RIGHTALIGN .F.
VISIBLE .T.
TABSTOP .T.
HELPID Nil
END TEXTBOX

DEFINE FRAME FRAME_2
ID Nil
COL 22
ROW 114
CAPTION "Timer2"
WIDTH 501
HEIGHT 81
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
BACKCOLOR Nil
FONTCOLOR Nil
OPAQUE .F.
TRANSPARENT .F.
END FRAME

DEFINE BUTTON btn_Start2
COL 82
ROW 128
WIDTH 100
HEIGHT 24
CAPTION "Start"
PICTURE Nil
ICON Nil
ACTION {||wMain.Timer_2.Enabled:=.t., wMain.btn_Stop2.Enabled:=.t., wMain.btn_Start2.Enabled:=.f.}
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
FONTCOLOR Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
HELPID Nil
FLAT .F.
TABSTOP .T.
TRANSPARENT .F.
TOOLTIP Nil
VISIBLE .T.
DEFAULT .F.
END BUTTON

DEFINE BUTTON btn_Stop2
COL 82
ROW 157
WIDTH 100
HEIGHT 24
CAPTION "Stop"
PICTURE Nil
ICON Nil
ACTION {||wMain.Timer_2.Enabled:=.f., wMain.btn_Stop2.Enabled:=.f., wMain.btn_Start2.Enabled:=.t.}
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
FONTCOLOR Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
HELPID Nil
FLAT .F.
TABSTOP .T.
TRANSPARENT .F.
TOOLTIP Nil
VISIBLE .T.
DEFAULT .F.
END BUTTON

DEFINE LABEL LABEL_3
COL 300
ROW 160
VALUE "Result"
ACTION Nil
WIDTH 100
HEIGHT 20
AUTOSIZE .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
BORDER .f.
CLIENTEDGE .f.
HSCROLL .f.
VSCROLL .f.
TRANSPARENT .F.
RIGHTALIGN .T.
HELPID Nil
VISIBLE .T.
END LABEL

DEFINE TEXTBOX txt_Result2
COL 415
ROW 158
WIDTH 100
HEIGHT 20
VALUE Nil
READONLY .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
PASSWORD .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
INPUTMASK Nil
FORMAT Nil
MAXLENGTH Nil
UPPERCASE .F.
LOWERCASE .F.
ONGOTFOCUS Nil
ONCHANGE Nil
ONLOSTFOCUS Nil
ONENTER Nil
RIGHTALIGN .F.
VISIBLE .T.
TABSTOP .T.
HELPID Nil
END TEXTBOX

DEFINE LABEL LABEL_4
COL 191
ROW 128
VALUE "Period(mSec) = 2000"
ACTION Nil
WIDTH 140
HEIGHT 20
AUTOSIZE .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
BORDER .f.
CLIENTEDGE .f.
HSCROLL .f.
VSCROLL .f.
TRANSPARENT .F.
HELPID Nil
VISIBLE .T.
END LABEL

DEFINE BUTTON btn_Stop3
COL 80
ROW 260
WIDTH 100
HEIGHT 24
CAPTION "Stop"
PICTURE Nil
ICON Nil
ACTION {||wMain.Timer_3.Enabled:=.f., wMain.btn_Stop3.Enabled:=.f., wMain.btn_Start3.Enabled:=.t.}
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
FONTCOLOR Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
HELPID Nil
FLAT .F.
TABSTOP .T.
TRANSPARENT .F.
TOOLTIP Nil
VISIBLE .T.
DEFAULT .F.
END BUTTON

DEFINE FRAME FRAME_3
ID Nil
COL 22
ROW 212
CAPTION "Timer3"
WIDTH 501
HEIGHT 81
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
BACKCOLOR Nil
FONTCOLOR Nil
OPAQUE .F.
TRANSPARENT .F.
END FRAME

DEFINE BUTTON btn_Start3
COL 80
ROW 230
WIDTH 100
HEIGHT 24
CAPTION "Start"
PICTURE Nil
ICON Nil
ACTION {||wMain.Timer_3.Enabled:=.t., wMain.btn_Stop3.Enabled:=.t., wMain.btn_Start3.Enabled:=.f.}
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
FONTCOLOR Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
HELPID Nil
FLAT .F.
TABSTOP .T.
TRANSPARENT .F.
TOOLTIP Nil
VISIBLE .T.
DEFAULT .F.
END BUTTON

DEFINE LABEL LABEL_5
COL 210
ROW 228
VALUE "Period(mSec) = 3000"
ACTION Nil
WIDTH 140
HEIGHT 20
AUTOSIZE .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
BORDER .f.
CLIENTEDGE .f.
HSCROLL .f.
VSCROLL .f.
TRANSPARENT .F.
HELPID Nil
VISIBLE .T.
END LABEL

DEFINE LABEL LABEL_6
COL 300
ROW 260
VALUE "Result"
ACTION Nil
WIDTH 100
HEIGHT 20
AUTOSIZE .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
BORDER .f.
CLIENTEDGE .f.
HSCROLL .f.
VSCROLL .f.
TRANSPARENT .F.
RIGHTALIGN .T.
HELPID Nil
VISIBLE .T.
END LABEL

DEFINE TEXTBOX txt_Result3
COL 410
ROW 260
WIDTH 100
HEIGHT 20
VALUE Nil
READONLY .F.
FONTNAME "Arial"
FONTSIZE 10
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
PASSWORD .F.
TOOLTIP Nil
BACKCOLOR Nil
FONTCOLOR Nil
INPUTMASK Nil
FORMAT Nil
MAXLENGTH Nil
UPPERCASE .F.
LOWERCASE .F.
ONGOTFOCUS Nil
ONCHANGE Nil
ONLOSTFOCUS Nil
ONENTER Nil
RIGHTALIGN .F.
VISIBLE .T.
TABSTOP .T.
HELPID Nil
END TEXTBOX


DEFINE TIMER Timer_1 INTERVAL 1000 ACTION wMain.txt_Result1.Value:=time()
DEFINE TIMER Timer_2 INTERVAL 2000 ACTION wMain.txt_Result2.Value:=time()
DEFINE TIMER Timer_3 INTERVAL 3000 ACTION wMain.txt_Result3.Value:=time()

END WINDOW

valery2 пишет:

 цитата:
3-я если остановить таймер, он продолжит выполнение(после Form_n.timer_n.enabled:=.t.) с остановленной позиции функции в проге и счетчик таймера продолжается, или все сначала?



Таймер только передает управление заданной процедуре.
И с учетом однопоточности Харбор-программ - пока вызванная процедура не завершится - все остальное - сосет лапу.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 64
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.06.08 07:59. Заголовок: gfilatov пишет: Не ..


gfilatov пишет:

 цитата:
Не рекомендуется использовать таймеры с интервалом опроса более 60000 (т.е. 1 минута

Простите за неученость, но, если, нужны интервалы в 1, 4, 8 часов, что тогда делать ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 65
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.06.08 11:05. Заголовок: gfilatov пишет: Не ..


gfilatov пишет:

 цитата:
Не рекомендуется использовать таймеры с интервалом опроса более 60000 (т.е. 1 минута)

Проверил на интервалах :proc1()- 1ч, proc2()- 1ч 30мин, proc3()- 1ч 35мин. Все 3 proc() отработали штатно !!! Сейчас запускаю более длительные периоды. Интересно ...
Хотя остается вопрос пересечения по времени. Как избежать, или, как обкрутить такую ситуацию?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 176
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 18.06.08 14:20. Заголовок: valery2 пишет: Хотя..


valery2 пишет:

 цитата:
Хотя остается вопрос пересечения по времени. Как избежать, или, как обкрутить такую ситуацию?



В однопоточном приложении никаких пересечений процедур быть не может. Срабатывание таймера - это просто присылка срообщения WM_TIMER. Сообщение кладется в очередь, если программа в этот момент занята какой-то процедурой, то она и будет "заниматься" этой процедурой. Когда освободиться, то вынет из очереди следующее сообщение и запустит следующую процедуру.

Поэтому, если у вас есть впечатление, что эти процедуры могут сработать параллельно в одном потоке, то это иллюзия.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 66
Зарегистрирован: 12.02.08
ссылка на сообщение  Отправлено: 18.06.08 14:23. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
Сообщение кладется в очередь, если программа в этот момент занята какой-то процедурой, то она и будет "заниматься" этой процедурой. Когда освободиться, то вынет из очереди следующее сообщение и запустит следующую процедуру.

СПАСИБО !!!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 41
Зарегистрирован: 04.12.07
ссылка на сообщение  Отправлено: 02.07.08 10:26. Заголовок: Всем привет. Хотел ..


Всем привет.

Хотел бы добавить несколько слов, т.к. приходилось с подобным сталкиваться.
Во-первых, если все таймеры в одном приложении, то к последнему сообщению добавить нечего, хотя можно исхитриться запустить три таймера в фоновом режиме.
А вот если таймеры будут запущены из разных приложений, то все они могут работать вполне прилично даже при обработке больших объемов данных.
Здесь важно:
1) выполнять сетевые блокировки и прочие вещи, для развязки сетевых коллизий, как для любого многопользовательского приложения;
2) в циклах после каждой строки (или группы строк) вставлять команду DO EVENTS или функцию ProcessMessages(). Эти команды освобождают тики времени процессору для выполнения других задач, но основная задача, конечно выполняется медленнее.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 543
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет