Автор | Сообщение |
|
| |
Пост 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.
|
|
|
Ответов - 96
, стр:
1
2
3
4
5
All
[только новые]
|
|
|
| |
Пост N: 1043
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.10.08 06:21. Заголовок: Петр пишет: Спрятат..
Петр пишет: цитата: | Спрятать курсор? IMHO только WAPI ShowCursor() |
| Спасибо , но не сработало. Петр пишет: цитата: | Dima пишет: цитата: IsValidThread реализован в Harbour Нет, а зачем она тебе? |
| Просто хотел подстраховаться от возможного вылета в hb_threadJoin(), так как задача будет работать 24 часа в сутки. И еще вопрос. for i=1 to 20 hb_threadStart(@Test(),i) next Каждый поток обрабатывается в своей области памяти ? Не будет конфликта локальных и привате переменных объявленных в функции Test() ?
|
|
|
|
| постоянный участник
|
Пост N: 568
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.10.08 07:44. Заголовок: ShowCursor( .F. ) ка..
ShowCursor( .F. ) катит? Странно.. Проверяй thread на hb_isPointer(thread) != .F. Dima пишет: цитата: | Каждый поток обрабатывается в своей области памяти ? |
| Смотри tests\mt\mttest08.prg Локальных не будет, а там как напишешь , т.е. с какими параметрами вызовешь hb_threadStart. Статические переменные обьявляй как thread static (если нужно)
|
|
|
|
| |
Пост N: 1049
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.10.08 12:26. Заголовок: Петр Подскажи дружи..
Петр Подскажи дружище что тут можно сделать ! for nind=1 to 50 hb_threadStart(@Test(),nind) next Func Test(nid) USE test SHARED Alias &( "Test"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test1"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test2"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test3"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test4"+ Alltrim( Str(nId)) ) NEW * тут что то делаем * и в какой то момент можем получить такой то Alias не существует * при обращении к какой то базе. * Почему ? * Куда и какой костыль вставить ? :) close ("Test"+ Alltrim( Str(nId))) close ("Test1"+ Alltrim( Str(nId))) close ("Test2"+ Alltrim( Str(nId))) close ("Test3"+ Alltrim( Str(nId))) close ("Test4"+ Alltrim( Str(nId))) return nil PS ADS. Что интерестно , то работает то нет..........
|
|
|
|
| |
Пост N: 1051
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.10.08 14:06. Заголовок: Если вставить костыл..
Если вставить костыль , то работает , но это наверное не выход for nind=1 to 50 hb_threadStart(@Test(),nind) hb_idleSleep(5) next
|
|
|
|
| постоянный участник
|
Пост N: 571
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.10.08 18:13. Заголовок: Dima пишет: for ni..
Dima пишет: цитата: | for nind=1 to 50 hb_threadStart(@Test(),nind) next |
| Это реальная ситуация? Тебе действительно нужно вызывать 50 потоков? И зачем одну базу открывать столько раз. По коду я вижу, что ты даже не проверяешь, успешно ли открыта база.
|
|
|
|
| |
Пост N: 1052
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.10.08 18:29. Заголовок: Петр пишет: Это реа..
Петр пишет: цитата: | Это реальная ситуация? Тебе действительно нужно вызывать 50 потоков? |
| Ситуация почти реальна. Сколько зайдет запросов столько будет и потоков. Запросов может быть от 1 до 50 Открытие базы я конечно же проверяю , дал пример что бы ясно было чего делаю. Если хоть одна база не открыта я выхожу из функции Test. Возможно дело в кол-ве одновременно открываемых файлов ? Тогда что нужно исправить ? Реально в одном потоке я открываю 20 баз и 15 индексных файлов.
|
|
|
|
| постоянный участник
|
Пост N: 572
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.10.08 18:56. Заголовок: А упростить себе жиз..
А упростить себе жизнь и держать таблицы открытыми?
|
|
|
|
| |
Пост N: 1053
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.10.08 18:59. Заголовок: Петр пишет: А упрос..
Петр пишет: цитата: | А упростить себе жизнь и держать таблицы открытыми? |
| Не думал про это , теперь подумаю ! И все же почему падает пример ?
|
|
|
|
| постоянный участник
|
Пост N: 573
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.10.08 19:28. Заголовок: Хороший вопрос, но у..
Хороший вопрос, но у меня сейчас нет на него ответа. Надо тестировать. Хотя бы найти, чей это косяк ADS или Harbour. Посмотрю на досуге. Но ясно одно, такие программы должны быть тщательно спроектированы и реализованы.
|
|
|
|
| |
Пост N: 1054
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.08 10:32. Заголовок: В реальном примере п..
В реальном примере падает даже на 3 потоках (не всегда) с той же ошибкой "Alias не существует" При чем падает в разных местах и закономерности не обнаружил. Базы все открыты 100 % (по той схеме о которой писал выше) Есть причины не держать базы все время открытыми. Где то читал на форуме http://www.fivetechsoft.com/forums что ADS не работает в MT режиме или работает не корректно.....но пока не вижу ссылки на тему. PS В отличие от Xharbour , Ads спецом для MT режима я не пересобирал , все собралось и так. Возможно в этом причина ?
|
|
|
|
| |
Пост N: 1055
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.08 13:16. Заголовок: Dima пишет: Func ..
Dima пишет: цитата: | Func Test(nid) USE test SHARED Alias &( "Test"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test1"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test2"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test3"+ Alltrim( Str(nId)) ) NEW USE test SHARED Alias &( "Test4"+ Alltrim( Str(nId)) ) NEW * тут что то делаем * и в какой то момент можем получить такой то Alias не существует * при обращении к какой то базе. * Почему ? * Куда и какой костыль вставить ? :) close ("Test"+ Alltrim( Str(nId))) close ("Test1"+ Alltrim( Str(nId))) close ("Test2"+ Alltrim( Str(nId))) close ("Test3"+ Alltrim( Str(nId))) close ("Test4"+ Alltrim( Str(nId))) return nil |
| Опытным путем установил , что если nid локальная переменная то прога может падать. Если Private то не падает. Если так может упасть Func Test(nid) Так пока не упала ни разу ;) Func Test() param nid PS Рано радовался...............меньше стало падать но все равно падает
|
|
|
|
|
| постоянный участник
|
Пост N: 574
Зарегистрирован: 09.10.06
|
|
Отправлено: 26.10.08 14:18. Заголовок: Dima пишет: В отлич..
Dima пишет: цитата: | В отличие от Xharbour , Ads спецом для MT режима я не пересобирал , все собралось и так. Возможно в этом причина ? |
| Скорее всего нет, я склоняюсь к мысли, что это проблемы ADS - не успевает отрабатывать запросы. for nind=1 to 50 hb_threadStart(@Test(),nind) next с RDDCDX отрабатывает без проблем Меняй схему работы - запросы ставь в очередь и обрабатывай последовательно. И hb_idleSleep() - это не костыль. А вообще задача у тебя на каком процессоре крутится - есть реальная многопроцессорность (ядерность) или все средствами OS разруливается?
|
|
|
|
| |
Пост N: 1056
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.08 14:53. Заголовок: Петр пишет: Меняй с..
Петр пишет: цитата: | Меняй схему работы - запросы ставь в очередь и обрабатывай последовательно |
| Видимо так и придется делать , хотя задачу ставили что бы все крутилось одновременно. Есть около 50 коммерческих агентов которые ездят с ноутбуками и собирают заявки от своих клиентов. По мере необходимости каждый из агентов сбрасывает на ftp свои заявки + могут делать запросы на получение прайс листов , остатков , актуального справочника своих клиентов и тд и тп. Именно эти запросы и хотелось пустить в потоки..........но , похоже не выйдет так как ADS выбрыкивается. Жаль. Задача крутится на самом обычном процессоре под XP
|
|
|
|
| постоянный участник
|
Пост N: 575
Зарегистрирован: 09.10.06
|
|
Отправлено: 26.10.08 15:53. Заголовок: Dima пишет: Задача ..
Dima пишет: цитата: | Задача крутится на самом обычном процессоре под XP |
| Почитай в справке ADS - Number of Worker Threads. Для 50 рабочих потоков нужно, как минимум 4 CPU (физических или логических).
|
|
|
|
| |
Пост N: 1057
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.10.08 16:16. Заголовок: Петр Понял. Спасибо..
Петр Понял. Спасибо ! Буду обрабатывать запросы последовательно.
|
|
|
|
| |
Пост N: 1058
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.10.08 10:06. Заголовок: Глянул Ads_err.dbf ,..
Глянул Ads_err.dbf , когда прога падала лезут одни и те же ошибки THREAD_NUM ERR_CLASS ERR_CODE ADS_SOURCE SRC_LINE 111295936 0 16 dbf.c 269 111295936 0 128 dbf.c 270 111295936 7000 7040 dbf.c 280 111879232 0 16 dbf.c 269 111879232 0 128 dbf.c 270 111879232 7000 7040 dbf.c 280 Так и не понял что за ERR_CODE 128 , в доке не нашел.
|
|
|
Ответов - 96
, стр:
1
2
3
4
5
All
[только новые]
|
|