Форум » [x]Harbour » О пользе и вреде hrb » Ответить

О пользе и вреде hrb

Петр: Пример от Pritpal Bedi [pre2] STATIC aModules := { { "", NIL } } FUNCTION Main() th_threadStart( {|| MonitorScripts() } ) // The other application code RETURN NIL FUNCTION MonitorScripts() LOCAL aDir, dir_ LOCAL cMask := "c:\myscripts\first_*.hrb" LOCAL cHrb, pHrb, nHrb, n LOCAL nLoaded := 0 DO WHILE .T. hb_idleSleep( 60 ) // Give an interval of 10 seconds aDir := Directory( cMask ) IF ! empty( aDir ) nHrb := 0 FOR EACH dir_ IN aDir n := val( substr( dir_[ 1 ], at( "_", dir_[ 1 ] ) + 1 ) ) IF n > nHrb nHrb := n ENDIF NEXT IF nHrb > 0 cHrb := "c:\myscripts\first_" + hb_ntos( nHrb - 1 ) + ".hrb" nLoaded := ascan( aModules, {|e_| e_[ 1 ] == Upper( cHrb ) } ) IF nLoaded > 0 // WHAT EXACTLY TO DO HERE, // WHAT IS SAFER WAY ? // WHAT WILL HAPPEN IF THE CODE // CONTAINER HEREIN IS EXECUTING // // SHOULD THIS BE CALLED ANYWAY ? // OR HB_HRB_BIND_OVERLOAD WILL DO THE TRICK hb_hrbUnload( aModules[ nLoaded, 2 ] ) cHrb := "c:\myscripts\first_" + hb_ntos( nHrb ) + ".hrb" pHrb := hb_hrbLoad( HB_HRB_BIND_OVERLOAD, cHrb ) IF ! empty( pHrb ) hb_mutexLock( __someMutex__ ) aModules[ nLoaded ] := { Upper( cHrb ), pHrb } hb_mutexUnLock( __someMutex__ ) ENDIF ELSE cHrb := "c:\myscripts\first_" + hb_ntos( nHrb ) + ".hrb" pHrb := hb_hrbLoad( HB_HRB_BIND_OVERLOAD, cHrb ) IF ! empty( pHrb ) hb_mutexLock( __someMutex__ ) AAdd( aModules, { Upper( cHrb ), pHrb } ) hb_mutexUnLock( __someMutex__ ) ENDIF ENDIF ENDIF ENDIF ENDDO RETURN NIL[/pre2] Кто-нибудь пользовался hrb в таком контексте и действительно, что будет?

Ответов - 4

Andrey: Спасибо Петр за пример. Очень интересен. Буду использовать у себя....

Петр: Andrey пишет: Очень интересен. Буду использовать у себя Я не для этого его выложил // WHAT EXACTLY TO DO HERE, // WHAT IS SAFER WAY ? // WHAT WILL HAPPEN IF THE CODE // CONTAINER HEREIN IS EXECUTING // // SHOULD THIS BE CALLED ANYWAY ? // OR HB_HRB_BIND_OVERLOAD WILL DO THE TRICK

AlexMyr: Петр пишет: Кто-нибудь пользовался hrb в таком контексте и действительно, что будет? Нужно пробовать и смотреть что получается А лучше объяснить суть дела - чего хотим получить в результате. Насколько я понял, то Pritpal спрашивает что будет если в разных потоках из hrb загрузить функции с одинаковыми названиями, так?


Петр: AlexMyr пишет: А лучше объяснить суть дела - чего хотим получить в результате. О результате ничего не сказано. AlexMyr пишет: Насколько я понял, то Pritpal спрашивает что будет если в разных потоках из hrb загрузить функции с одинаковыми названиями, так? Что будет если ранее загруженная функция выполняется, а тут ее (во время выполнения в другом потоке) и выгрузили или перегрузили



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