26.11.2004, 10:19 | #1 |
Участник
|
Выполнение запросов в отдельном потоке
Всем доброе утро!
Кто - нибудь знает почему не выполняются запросы при запуске отдельного потока PHP код:
PHP код:
|
|
26.11.2004, 10:33 | #2 |
Moderator
|
Честно говоря не пробовал - при случае посмотрю, но боюсь, что все на так просто.
В вашем случае коннект к БД является разделяемым ресурсом для двух потоков, что требует дополнительных телодвижений при работе с ним. Как полее простой варинат, можно попробовать создавать в потоке свой UserConnection и работать через него. Примерно так: PHP код:
|
|
26.11.2004, 10:51 | #3 |
Участник
|
Глубоко ему плевать на UserConnection!!! Не выполняется запрос и всё!
Возникает ощущение, что класс Thread очередная ЗАСАДА от MS |
|
26.11.2004, 10:58 | #4 |
Moderator
|
Попозже постараюсь посмотреть - раньше делал так и работало.
Но вероятность того, что Вам ответят здесь возрастет, если вы поясните: Цитата:
Не выполняется запрос и всё!
- что говорит profiler * по поводу данного запроса * по поводу создания нового коннекта из отдельного потока |
|
26.11.2004, 11:08 | #5 |
Участник
|
Заменечо, что info( '...' ) в потоке не работает, вывести информацию можно только через print '...'; pause;. Система ни на что не ругется. Profiler в потоке не работает, т.е. попасть в нужное место и посмотреть значение переменных мне не удалось, что выполнение происходит до запроса определил через print '...'; pause;. Запрос самый простой на вывод всех строк из таблицы, таблица общая для виртуальной компании.
|
|
26.11.2004, 11:15 | #6 |
Moderator
|
Я имел в виду Profiler от MS SQL. Или какое-нибудь средство трассировки запросов, если у кас Oracle - LogMinner, trace-файлы и т.д.
infolog() - связан с оконной процедурой основного окна(потока) Аксапты и вывод в него возможен только из этого потока. Точне говоря, скорее всего, возможен и из других потоков, но только в случае маршалинга указателя на него в другой поток. Очень хорошо про потоки и работу с ними написано у Рихтера. |
|
26.11.2004, 11:31 | #7 |
Moderator
|
Только что проверил - знаешь - у меня и без этих манипуляций с отдельным коннектом все работает.
Я взял стандартный TutorialThread и в его метод runThread() добавил while select. |
|
26.11.2004, 11:31 | #8 |
Участник
|
Кстати про Profiler от MS SQL это мысль. Про потоки все понятно, читали, только поток в Axapta, на мой взгляд, должен иметь все те возможности как и главный поток Axapta, а если это не так, то зачем вообще его сделали? Чтобы 2 + 2 вычислять?
|
|
26.11.2004, 11:44 | #9 |
Модератор
|
Re: Выполнение запросов в отдельном потоке
Цитата:
Изначально опубликовано sergy
Кто - нибудь знает почему не выполняются запросы при запуске отдельного потока см. класс SysEventHandler |
|
26.11.2004, 11:46 | #10 |
Moderator
|
Цитата:
Про потоки все понятно, читали, только поток в Axapta, на мой взгляд, должен иметь все те возможности как и главный поток Axapta, а если это не так, то зачем вообще его сделали?
И хотя потоки, работающие в контексте одного процесса, разделяют адресное пространство - в многопользовательском режиме надо предпринимать дополнительные усилия для их синхронизации - такие, как Interlocked-функции, критические секции и т.д. - глава 8 у Рихтера. |
|
26.11.2004, 12:00 | #11 |
Участник
|
А запросик - то действительно выполняется как с UserConnection, так и без это видно в Profiler. Про потоки все - таки понятно, но Axapta не имеет тех возможностей, что VC.
Класс SysEventHandler посмотрю, спасибо. |
|