|  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 посмотрю, спасибо. | 
|  |