On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 887
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.09.08 16:05. Заголовок: [translate] BackGround


Кто то может перевести help к этим функциям на русский ?
HB_BackGroundActive() Queries and/or changes the activity of a single background task.
HB_BackGroundAdd() Adds a new background task.
HB_BackGroundDel() Removes a background task from the internal task list.
HB_BackGroundReset() Resets the internal counter of background tasks.
HB_BackGroundRun() Enforces execution of one or all background tasks.
HB_BackGroundTime() Queries or changes the wait interval in milliseconds after which the task is executed.
HB_IdleAdd() Adds a background task for being executed during idle states.
HB_IdleDel() Removes a task from the list of idle tasks.
HB_IdleReset() Resets the internal counter of idle tasks.
HB_IdleSleep() Halts idle task processing for a number of seconds.
HB_IdleSleepMSec() Queries or changes the default time interval for idle task processing.
HB_IdleState() Signals an idle state.
HB_IdleWaitNoCPU() Toggles the mode for CPU usage in Idle wait states.
SET BACKGROUND TASKS Enables or disables the activity of background tasks.
SET BACKGROUNDTICK Defines the processing interval for background tasks.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 96 , стр: 1 2 3 4 5 All [только новые]


постоянный участник


Пост N: 521
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 10.10.08 18:38. Заголовок: Извини, нет у меня A..


Извини, нет у меня ACE SDK - помочь не могу. Если ссылку (не с оффсайта) выложишь, тогда можно было бы посмотреть.

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




Пост N: 977
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.10.08 18:48. Заголовок: Петр http://files.m..

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


Пост N: 522
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 10.10.08 20:43. Заголовок: Dima пишет: но не м..


Dima пишет:

 цитата:
но не могу ADS приручить для этого режима. бьет ошибку



Дима у меня с тем ace sdk, что ты выложил все получилось нормально - без ошибок..
Делал так:
обновил xHarbour с CVS, используя make_b32 пересобрал, предварительно сделав make_b32 clean.

Зашел в contrib\rdd_ads.
В make_b32.bat добавил
set HB_DIR_ADS=e:\extlib\acesdk
и установил
set CFLAGS=%_CFLAGS% -I"%HB_DIR_ADS%" -tWM -DHB_THREAD_SUPPORT -DADS_LIB_VERSION=550
далее выполнил
make_b32.bat clean // на всякий случай
make_b32.bat

потом зашел в tests
в bldtest.bat прописал
set HB_USER_LIBS=ace32.lib rddads.lib
в ads.prg добавил в начало программы

? HB_MULTITHREAD() // тоже, на всякий случай

bldtest.bat /MT ads
запустил ads.exe - все Ok - это я шучу - перед тем как радоваться пришлось ads.prg немного поправить, алиасы указать..


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




Пост N: 979
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.10.08 10:09. Заголовок: Петр пишет: set CFL..


Петр пишет:

 цитата:
set CFLAGS=%_CFLAGS% -I"%HB_DIR_ADS%" -tWM -DHB_THREAD_SUPPORT -DADS_LIB_VERSION=550


А вот так действительно собралось ;)
Спасибо !!!

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




Пост N: 980
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.10.08 10:22. Заголовок: Это собрался мини пр..


Это собрался мини примерчик.
В реальной задаче проблема с HBZIP.LIB во время сборки
Error: Unresolved external '_errno' referenced from C:\X\LIB\HBZIP.LIB|zipfile
Что править и где для MT режима ?


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


Пост N: 523
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.10.08 14:17. Заголовок: В CONTRIB\HBZLIB..


В CONTRIB\HBZLIB\makefile.bc есть строчка
CompInheritOptsAt_ziparddll = -I$(BCB)\INCLUDE -Iinclude -I..\..\include;.;..\..\source\rtl\zlib..
после нее добавь
CompInheritOptsAt_ziparddll = -tWM $(CompInheritOptsAt_ziparddll)

или просто всунь -tWM где нибудь в CompInheritOptsAt_ziparddll, например
CompInheritOptsAt_ziparddll = -tWM -I$(BCB)\INCLUDE
и дальше привычное
make_b32.bat clean
make_b32.bat

Компилируя с этим флагом мы заставляем linker искать стандартные C-функции в cw32mt.lib.
Можно это сделать и по другому, но это самый простой путь, к тому же правильный.


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




Пост N: 982
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.10.08 14:56. Заголовок: Петр Спасибо , все ..


Петр
Спасибо , все собралось замечательно !!!!!!!!!!!!!!!

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




Пост N: 983
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.10.08 15:59. Заголовок: Петр пишет: PROCEDU..


Петр пишет:

 цитата:
PROCEDURE Main
LOCAL nTask, nIdle

SET BACKGROUND TASKS ON

nIdle := HB_IdleAdd( {|| HB_BackGroundRun() } ) // обязательно !!

nTask := HB_BackGroundAdd( {|| ShowTime() }, 1000 )

//здесь что-то делаем

HB_BackGroundDel( nTask )
HB_IdleDel( nIdle )
RETURN



Cделал так
 
PROCEDURE Main
LOCAL nTask, nIdle

SET BACKGROUND TASKS ON

nIdle := HB_IdleAdd( {|| HB_BackGroundRun() } )

nTask := HB_BackGroundAdd( {|| Test() }, 1000 )

do while inkey(0)#27
enddo
do while HB_BackGroundActive(nTask,.f.) // этот кусок кода гарантирует что функция Test завершится
enddo // коректно или это нужно делать иначе ?


HB_BackGroundDel( nTask )
HB_IdleDel( nIdle )
SET BACKGROUND TASKS OFF
RETURN


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


Пост N: 524
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.10.08 19:10. Заголовок: Dima пишет: do whi..


Dima пишет:

 цитата:
do while HB_BackGroundActive(nTask,.f.) // этот кусок кода гарантирует что функция Test завершится
enddo // коректно или это нужно делать иначе ?



Увы, не гарантирует.
HB_BackGroundActive(nTask,.f.) просто сразу деактивирует задачу и все.
Нужно понимать HB_BackGroundActive() дает возможность установить не то, выполняется ли сейчас функция Test, а будет ли она выполнятся по прошествии nTimeOut или не будет.



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




Пост N: 984
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.10.08 19:25. Заголовок: Петр Буду думать , ..


Петр
Буду думать , спасибо !!!

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


Пост N: 525
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.10.08 21:12. Заголовок: Dima пишет: Буду ду..


Dima пишет:

 цитата:
Буду думать



Harbour + MT: пример

#include "hbthread.ch" 

MEMVAR lExit
//
PROCEDURE main
LOCAL threadA, threadB, xResult := NIL
PUBLIC lExit := .F.

threadB := hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @MyFuncB() )
threadA := hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @MyFuncA() )

__keyboard(chr(27)) // можно закомментировать

hb_threadJoin( threadA, @xResult )
? xResult

hb_threadJoin( threadB, @xResult )
? xResult
//
RETURN

/*
*/
STATIC FUNCTION MyFuncA( )

DO WHILE inkey( 0.1 ) != 27
ENDDO
lExit := .T.
//
RETURN LastKey()

/*
*/
STATIC FUNCTION MyFuncB( )
LOCAL nCounter, nI

DO WHILE !lExit
nCounter := 0

FOR nI := 1 TO 10000
nCounter ++
NEXT nI
END
//
RETURN nCounter


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


Пост N: 526
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.10.08 22:42. Заголовок: Ценой, просто неверо..


Ценой, просто невероятных умственных усилий удалось портировать в xHarbour

STATIC lExit 
//
PROCEDURE main
LOCAL threadA, threadB, nCounter := 0

lExit := .F.

threadB := StartThread( @MyFuncB(), @nCounter )
threadA := StartThread( @MyFuncA() )

__keyboard(chr(27))

JoinThread( threadA )
? LastKey()

JoinThread( threadB )
? nCounter
//
RETURN

/*
*/
STATIC PROCEDURE MyFuncA( )

DO WHILE inkey( 0.1 ) != 27
ENDDO
lExit := .T.
//
RETURN

/*
*/
STATIC PROCEDURE MyFuncB( nCounter )
LOCAL nI

DO WHILE !lExit
nCounter := 0

FOR nI := 1 TO 10000
nCounter ++
NEXT nI
ThreadSleep( 10 )
END
//
RETURN


В результате выполнения этих програм, мы получаем на выходе
27
10000

А это значит, что функция (процедура) MyFuncB вполне корректно выполняется, что нам и требовалось.

Можно закомментировать __keyboard(chr(27)) и поиграться

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




Пост N: 985
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.10.08 11:05. Заголовок: Петр пишет: threadB..


Петр пишет:

 цитата:
threadB := StartThread( @MyFuncB(), @nCounter )
threadA := StartThread( @MyFuncA() )

__keyboard(chr(27))


Спасибо вроде разобрался ;)
Но такой код срабатывает 1 раз.
Для того что он работал все время нужно сделать так
threadB := StartThread( @MyFuncB(), @nCounter )
threadA := StartThread( @MyFuncA() )
WaitForThreads()
__keyboard(chr(27))

Не совсем понял что делает JoinThread
Не проще ли так
StopThread(threadA)
StopThread(threadB)

Или
KillAllThreads()


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


Пост N: 527
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.10.08 12:36. Заголовок: Dima пишет: Но тако..


Dima пишет:

 цитата:
Но такой код срабатывает 1 раз.



Это с __keyboard(chr(27)) - мне просто лень ESC нажимать
Закомментируй и посмотри - все выполняется в цикле, как надо.


 цитата:
Не проще ли так
StopThread(threadA)
StopThread(threadB)



Нет, мы просто остановим потоки и в результате 10000 на экране можем не увидеть

JoinThread приостанавливает выполнение главного потока, созданого по умолчанию и дожидается выполнения потока А, т.е. пока мы не нажмем ESC.
Дальше JoinThread( threadB ) дожидается завершения выполнения потока Б.

Ну а так ( KillAllThreads() ) убивать потоки не рекомендую вообще, за исключением действий при форсмажорных обстоятельствах.





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




Пост N: 986
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.10.08 13:02. Заголовок: Петр Есть проблемка..


Петр
Есть проблемка тогда , даже 2
Если использовать JoinThread то прога падает
Subsystem Call ....: BASE
System Code .......: 3012
Default Status ....: .F.
Description .......: Given thread is not valid
Operation .........: JOINTHREAD
Arguments .........: [ 1] = Type: P Val: A91FD0

Кроме того AdsIsServerLoaded всегда возвращает 0 (в MT режиме , в обычном все нормально)


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




Пост N: 987
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.10.08 13:06. Заголовок: Виноват , поправка З..


Виноват , поправка
Забыл отключить WaitForThreads()
И JOINTHREAD сработал
А вот с AdsIsServerLoaded проблема осталась

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




Пост N: 989
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.10.08 15:23. Заголовок: Очередной глюк в MT ..


Очередной глюк в MT режиме :(
? AdsIsServerLoaded(CurDrive()+":\"+CurDir()+"\DBF\"+"data_nul.dbf") // локальный ADS , возвращает 0
Причем до вызова всех StartThread , AdsIsServerLoaded работает правильно

? AdsIsServerLoaded("\\servak\sys\test\data_nul.dbf") // как и положено вернет 2 , remote ADS

В обычном режиме все нормально.......

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




Пост N: 990
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.10.08 16:36. Заголовок: Вообщем решил пока н..


Вообщем решил пока не использовать Local Ads , так как не коннектится в MT режиме

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




Пост N: 995
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.10.08 08:56. Заголовок: Петр А если 3 поток..


Петр
А если 3 потока то как правильно сделать ?
 
PROCEDURE main
LOCAL threadA, threadB,threadC

lExit := .F.

threadC := StartThread( @MyFuncC())
threadB := StartThread( @MyFuncB())
threadA := StartThread( @MyFuncA() )


JoinThread( threadA )
JoinThread( threadB )
JoinThread( threadC ) // тут иногда падает


RETURN



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


Пост N: 528
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 13.10.08 13:04. Заголовок: xHarbour падает и на..


threadC просто не инициилизировался.

xHarbour падает и на двух потоках - убери из моего примера ThreadSleep( 10 ) и убедись:

STATIC PROCEDURE MyFuncB( nCounter )
LOCAL nI

DO WHILE !lExit
nCounter := 0

FOR nI := 1 TO 2
nCounter ++
NEXT nI
END
//
RETURN

Что может оттянуть (предотвратить) падение - в MyFuncC добавь перед выходом ThreadSleep( nTimeOut ). Для Win nTimeOut == 20 в самый раз или проводи проверки

IF hb_IsPointer(threadC) ; JoinThread( threadC ) ; ENDIF


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

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