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

[?] PACK

Dima: Во время упаковки базы по команде Pack он же __dbPack() размером от 500 метров винда 7 пишет что приложение не отвечает....пока Pack не закончен. Базы пакую в цикле. Пробовал до Pack запускать отдельный поток в котором тупо в цикле пашет hb_releasecpu() а после Pack завершать поток...не помогло. Как то можно решить эту "проблему" ? PS на винде XP такого не замечал. PS-1 вариант не юзать Pack не предлагать (знаю о чём речь).

Ответов - 25, стр: 1 2 All

Andrey: Dima пишет: Как то можно решить эту "проблему" ? Можно тупо самому сделать аналог Pack. И при своём Pack раз через 100 или 500 записей выводить что-то на экран. Я тоже сталкивался с подвисанием проги в терминалке. А в МиниГуи подвисает чаще - делаю тогда DO EVENT.

Haz: Dima пишет: Как то можно решить эту "проблему" ? не оно ? [pre2] __dbPack( [<bBlock>], [<nEvery>] ) executes <bBlock> every <nEvery> records. [/pre2] релизить цпу не в потоке а внутри пака PS. мож быть надо не релизить цпу , а обслужить очередь сообщений ... в минигуи есть DoEvents() попробуй и ее [pre2] HB_FUNC( DOEVENTS ) { MSG Msg; while( PeekMessage( ( LPMSG ) &Msg, 0, 0, 0, PM_REMOVE ) ) { hDlgModeless = GetActiveWindow(); if( hDlgModeless == NULL || ! IsDialogMessage( hDlgModeless, &Msg ) ) { TranslateMessage( &Msg ); DispatchMessage( &Msg ); } } } [/pre2]

Dima: Haz пишет: не оно ? Идею понял. Спасибо. Andrey пишет: Можно тупо самому сделать аналог Pack. Уже , но работает медленнее.


Dima: Haz пишет: в минигуи есть DoEvents() попробуй и ее Пробнул и по ходу надо добавить static HWND hDlgModeless = NULL; но винда пишет тож самое при ...сделал так для теста __dbPack({|| DOEVENTS()},100)... до лампочки ЗЫ Может просто тупо что то выводить на экран ?

Andrey: Dima пишет: Может просто тупо что то выводить на экран ? Попробуй ! Скорее всего поможет. Типа @ 0,0 say "+"

Dima: Andrey пишет: Попробуй ! Скорее всего поможет. Типа @ 0,0 say "+" Неа , тоже до лампочки и у меня подозрение что блок кода не отрабатывает , так как на экран ни чего не выводится. Сделал так ni:=1 __dbPack({|| hb_dispoutat(0,0,ntoc(ni),"w/n"),ni++}) PS RDD ADSCDX

Haz: Dima пишет: подозрение что блок кода не отрабатывает , так как на экран ни чего не выводится. Задай nEvery = 1

Dima: Haz пишет: Задай nEvery = 1 Задавал , не пашет. С DBFCDX работает. Попробовал еще раз с созданием потока перед PACK и его убиением после. В нем делаю вывод на экран Seconds() , так вот при паке толстой базы тормозится даже поток что странно и как всегда получил месагу в окне "Приложение не отвечает"

Haz: Dima пишет: (знаю о чём речь). Ну тогда тебе туда

Dima: Haz пишет: Ну тогда тебе туда Не хотелось идти таким путем

fil: Во время упаковки базы по команде Pack он же __dbPack() размером от 500 метров винда 7 пишет что приложение не отвечает....пока Pack не закончен. Поток, это конечно хорошо.. А может внешнюю аппликацию пускать, для PAKA ?

Dima: fil пишет: А может внешнюю аппликацию пускать, для PAKA ? Не вариант. Пакнул толстую базу под DBFCDX , все норм ни чего не подвисло. Похоже проблема ADS или RDDADS

Haz: Dima пишет: Пакнул толстую базу под DBFCDX , пакуй драйвером DBFCDX они ж совместимы c ADSCDX. потом восстанавливай ADS как по умолчанию

Haz: или переходи на ADT там пак не нужен

Dima: Haz пишет: пакуй драйвером DBFCDX они ж совместимы c ADSCDX. Вариант однако , вот только не будет ли он по сети работать медленнее это вопрос...

Haz: Dima пишет: вот только не будет ли он по сети работать медленнее это вопрос... У тебя базы на сервере ?? если так то упаковка конечно пойдет через клиента Есть для этого AdsPackTable() или грузи упаковкой робота живущего на сервере

Dima: Haz ушел думать......

Haz: Dima пишет: ушел думать...... а чего тут думать, подключай словари и используй сторед процедуру для упаковки PS отвечать не надо, знаю ответ

Dima: Haz пишет: PS отвечать не надо, знаю ответ Да мне надо лампочку поменять а ты предлагаешь сделать ремонт в "квартире"

Dima: Haz Вопрос на засыпку Ты сделал SQL запрос который работает более 5 секунд и ты не получаешь в заголовке окна что приложение не отвечает ? По умолчанию время ответа приложения 5000 милисек (для XP вроде больше) и живет оно в реестре. HKEY_CURRENT_USER\Control Panel\Desktop Параметр (в миллисекундах) HungAppTimeout То есть давая PACK базе по старинке , через 5 сек если PACK не закончен , реально получим временный завис , до окончания работы PACK. Вероятно тоже было бы и с индексированием толстой базы , но под ADS есть для этого случая AdsRegCallback (если его использовать) , что не приводит к мнимому зависанию.



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