Форум » [x]Harbour » Idle » Ответить

Idle

Dima: Функция прописанная в hb_idleAdd разве не должна работать фоново и не влиять на основной процесс. Пример таков nvesH := hb_idleAdd( {||Vescreen() } ) тут мой бровс hb_idleDel(nvesH) Func Vescreen() ** тут я снимаю вес с электронных весов и вывожу его на экран. * снятие веса может занимать до 1 секунды и именно эту задержку *чувствую когда хожу по бровсу hb_DispOutAt(3,60,MVesi(aversun[1],aversun[2],aversun[3],.f.),"gr+/b") return nil что не так делаю ?

Ответов - 4

fil: Попробуй так dim[1]:=HB_IdleAdd( {|| HB_BackGroundRun() } ) dim[2]:=HB_BackGroundAdd( {|| МояФункция() }, 100, .T.) броузер HB_BackGroundDel( dim[2] ) HB_IdleDel( dim[1] )

Dima: fil пишет: dim[1]:=HB_IdleAdd( {|| HB_BackGroundRun() } ) dim[2]:=HB_BackGroundAdd( {|| МояФункция() }, 100, .T.) Не много не так нужно Вот так dim[2]:=HB_BackGroundAdd( {|| МояФункция() }, 100, .T.) dim[1]:=HB_IdleAdd( {|| HB_BackGroundRun(dim[2]) } ) Тормоза по прежнему в бровсе Попробую с потоками !

santy: пример с xHarbour, работает в Harbour PROCEDURE Main LOCAL nCounter := 10 CLS //DispOutAtSetPos( .F. ) nTask := HB_IdleAdd( {|| DispMsg( --nCounter ) } ) ? "Test program for idle state" ? ? InKey( 10 ) HB_IdleDel( nTask ) ? ? "Program resumes" RETURN PROCEDURE DispMsg( nCounter ) LOCAL cMsg cMsg := "Program resumes in " cMsg += Ltrim( Str(nCounter) ) cMsg += " seconds unless you press a key" //DispoutAt( Row(), Col(), cMsg ) ? cMsg Hb_IdleSleep( 1 ) RETURN


Dima: santy Чуть модифицировал твой пример [pre2] PROCEDURE Main LOCAL nCounter := 10 CLS //DispOutAtSetPos( .F. ) nTask := HB_IdleAdd( {|| DispMsg( --nCounter ) } ) use TEST new browse(1,0,24,79) HB_IdleDel( nTask ) ? ? "Program resumes" RETURN PROCEDURE DispMsg( nCounter ) LOCAL cMsg cMsg := "Program resumes in " cMsg += Ltrim( Str(nCounter) ) cMsg += " seconds unless you press a key" HB_DispoutAt( 0, 0, cMsg ) Hb_IdleSleep( 1 ) RETURN [/pre2] Попробуй походить по браузеру ;) Переделал на потоки , тормозов нет !



полная версия страницы