powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Баг или что ???
23 сообщений из 23, страница 1 из 1
Баг или что ???
    #32537081
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть DCOM сервер от него приходят события
ну и на клиенте соотвесвенно оброботчик с такими параметрами
Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall OnSending(BSTR Str_uid,BSTR Str ...)
{
  // просто для теста , делаю так 
  AnsiString s1 = Str_uid,s2 = Str;
  Memo1->Lines->Add("[P1 = "+Str_uid+"][P2 = "+Str+"]");
}

Запускаю сразу гдето три клиента и смотрю как они с этим работают .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 у того клиента который сделал действия с БД, 
 получается так (нормально) , каждый получил по четыре события .

[P1 = Zakazy] [P2 = new]
[P1 = Zakazy] [P2 = drv]
[P1 = Zakazy] [P2 = drv]
[P1 = Zakazy] [P2 = drv]

 У других , что то вроде этого
[P1 = Zakazy] [P2 = new]
[P1 = drv] [P2 = Zakazy]     < --- почему местами меняются ? :0
 
[P1 = Zakazy] [P2 = drv]
[P1 = Zakazy] [P2 = drv]

иногда вот такие реверстные события ловят ...

События возбуждаются со стороны MSSQL
и выглядит эта процедура так .
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE PROCEDURE SQLEvent_ex
  @Str_uid varchar ( 255 ),
  @Str varchar ( 255 ),
  @int_param0 int =  0 ,
  @int_param1 int =  0 
AS
set nocount on
declare  @hd int,  @obj int,  @msg varchar( 255 ),  @src varchar( 255 )
exec @hd=sp_OACreate 'SQLEventServer.SQLEventServise', @obj OUTPUT
if @hd<> 0  GOTO ERR
exec @hd=sp_OAMethod @obj, 'Send', NULL, @Str_uid,@Str,  @int_param0 , @int_param1
if @hd<> 0  GOTO ERR
exec @hd=sp_OADestroy @obj
if @hd<> 0  GOTO ERR
return  0 
ERR:
exec sp_OAGetErrorInfo @obj, @src OUT, @msg OUT
Raiserror(@msg, 16 ,- 1 )
Return - 1 



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32537223
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни у ково нету мыслей ???


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32537859
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты смотрел, что улетает с MSSQL и что в клиентов приходит? Ну что приходит - ясно, а что улетает?
...
Рейтинг: 0 / 0
Баг или что ???
    #32538074
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да как тебе сказать ,
в триггере
при новом заказе
exec SQLEvent_ex 'Zakazy','new'

при изменении заказа
exec SQLEvent_ex 'Zakazy','drv' <--- вот как раз клиент получает наоборот
но необьязательно , он так же может и с параметрами 'Zakazy','new'
получить 'new','Zakazy' ...
и так же как я говорил не все клиенты так получают .



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32538107
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, я придумал!

Делай так:
Посылай вместо двух строк одну, состоящую из двух, разделённых сепаратором каким-нить. Потом в клиенте по этому сепаратору разбирай.
...
Рейтинг: 0 / 0
Баг или что ???
    #32538134
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я как раз от этого ушел :)
раздражало разбирать строку такого типа
#Zakazy#update#01#123321
поэтому передаю четыре параметра
вида
Str_uid, Str, int_0, int_1 :))


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32538831
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сечайц в QA запихал что то вроде этого

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 
   exec SQLEvent_ex 'A','B', 1 , 2 

Результат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2  
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  B , A,  1 ,  2   < -- Вот глюк 
 
  B , A,  1 ,  2   < -- Еще :(
 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 
  A , B,  1 ,  2 

Хмммм....


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32539232
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторраздражало разбирать строку такого типа
Ну ты даёшь :)

Впрочем, если время есть, можно и поразбираться, почему параметры меняются. А так, лучше работающий вариант использовать.
...
Рейтинг: 0 / 0
Баг или что ???
    #32539269
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2CEMb
ну дык, простых путей не ищем



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32539275
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зря :)

Я вот обычно стараюсь простые искать - и багов меньше и работает быстрее :)
...
Рейтинг: 0 / 0
Баг или что ???
    #32539298
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интерестно
что в этом случае

Код: plaintext
1.
2.
 exec SQLEvent_ex 'Test#param1#param2#param3#param4','', 1 , 2 
 exec SQLEvent_ex 'Test#param1#param2#param3#param4','', 1 , 2 

добится этого глюка пока не смог

ресультат
Код: plaintext
1.
2.
 Test#param1#param2#param3#param4 ,  ,  1 ,  2   << -- Нормально :)
 

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32539412
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальнейший разбор полетов

сделал анализ просто грубо опять текстом

внутри реализации Fire_OnSend
добавил все что он там клиентам возбуждает :) в мемо ...


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
HRESULT Fire_OnSend(BSTR Str_uid, BSTR Str, int int_0, int int_1)
{
   ... <skiped>
   for (nConnectionIndex =  0 ; nConnectionIndex < nConnections;nConnectionIndex++)
      {
           if (pDispatch != NULL)
         	{
                      ... <skiped>
                      AnsiString s = Str_uid,s1 = Str,si = nConnectionIndex;
                      SQLEventForm->Memo1->Lines->Add(si+") "+s+";"+s1); 
                     //Вывожу в мемо все что отправляется должно клиентам.
          	}
      }
		delete[] pvars;
		return varResult.scode;
}

Ну и естественно изучаю :)
4 клиента которым возбуждается событие со стороны сервера(DCOM).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
 0 ) A;B   // это посылается с другого клиента не MSSQL
 1 ) A;B   // как видно что клиента  4  всем приходит ок (проверял не один раз)
 2 ) A;B
 3 ) A;B
...

 0 ) Zakazy;delete  // как только сообщение уходит от MSSQL уже вижу  глюки
                      // Где сообщение Zakazy;delete остальным трем клиентам ?
 0 ) Zakazy;drv      // первое нормально
 1 ) drv;Zakazy      // пошло-поехало  :) 
 2 ) drv;Zakazy      // вот они перевертыши :(
 3 ) drv;Zakazy     
 1 ) Zakazy;drv      // и тутже какбудто он ачухивается и отсылает уже нормально
 2 ) Zakazy;drv
 3 ) Zakazy;drv
 0 ) Zakazy;update
 0 ) Zakazy;new    // опять первому нормально остальным , ну как говорится остатки сладки 
 1 ) new;Zakazy        
 2 ) new;Zakazy 
 3 ) new;Zakazy
 1 ) Zakazy;new    // очухался
 2 ) Zakazy;new
 3 ) Zakazy;new

 0 ) Timer;SetTime        // это сообщение приходит стабильно без глюков хоть и от MSSQL
 1 ) Timer;SetTime        // это приходит от Джоба . 
 2 ) Timer;SetTime
 3 ) Timer;SetTime

И вот выводы , все что уходит из MSSQL в основном коверкается .
а если с приложения , то все гуд .

а может у сервера из-за того что
из триггера вызвался метод Send(...)
он к нему законектился вызвал метод и тут же обрубился
и по этому поводу у него комплекс не полноценности появляется ?



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32539639
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он к нему законектился вызвал метод и тут же обрубился

Если создается где-то при вызове метода отдельный thread или еще что-то такое работает после возврата из метода обратно в триггер
Надо посмотреть на

STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return (AfxDllCanUnloadNow()==S_OK && _Module.GetLockCount()==0) ? S_OK : S_FALSE;
}

И не давать выгрузить COM при помощи инкрементации
_Module.m_nLockCnt
до завершения работы всего чего надо ...

[P1 = drv] [P2 = Zakazy] <--- почему местами меняются ? :0
Интересный глюк. И как только access violation не вылетает.. чудеса.
Может это связано с тем что сетевой стэк переполняется при запуске подряд и не успевает обработать все вызовы.(что будет если вызывать в вашем эксперименте exec SQLEvent_ex 'A','B',1,2
с некоторой задержкой???)
...
Рейтинг: 0 / 0
Баг или что ???
    #32540451
trayal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, конечно, че не то говорю, но все таки...

В хп вызывается метод Send , а приведен кусок кода Fire_OnSend . Можно на Send посмотреть?
...
Рейтинг: 0 / 0
Баг или что ???
    #32540511
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ндык да запросто ...
Собсвенно говоря , на метод Send сразу возбуждаю событие ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
static TCOMCriticalSection CS;

void _USERENTRY NThread(LPVOID lpParameter)
{
   CoInitializeEx(NULL,COINIT_MULTITHREADED);
   TSQLEventServiseImpl *myAtl = (TSQLEventServiseImpl*)lpParameter;
   myAtl->Fire_OnSend(myAtl->m_Str_uid,myAtl->m_Str,myAtl->m_int_0,myAtl->m_int_1);
  ::CoUninitialize ();
}

STDMETHODIMP TSQLEventServiseImpl::Send(BSTR Str_uid, BSTR Str, int int_0,
  int int_1)
{
   HRESULT hres = S_OK;
   DWORD tid;
   HANDLE hThrd;
   try
   {

    // TCOMCriticalSection::Lock Lock(CS);
     m_Str_uid = Str_uid;
     m_Str = Str;
     m_int_0 = int_0;
     m_int_1 = int_1;
     if((hThrd = CreateThread( 0 , 0 ,(LPTHREAD_START_ROUTINE)NThread,(void *)this, 0 ,&tid)) == NULL)
         {
            hres = - 1 ;
         }
     CloseHandle(hThrd);

   }
   catch(Exception &e)
   {
     hres = Error(e.Message.c_str(),IID_ISQLEventServise,E_FAIL);
   }
   catch(...)
   {
     hres = Error(_T("Критическая ошибка !"),IID_ISQLEventServise,E_UNEXPECTED);
   }
   return hres;
}

...
Рейтинг: 0 / 0
Баг или что ???
    #32540833
trayal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю отловить место, где происходит такая штука.
Т.е. вести логи в след. местах:

1) В процедуре Send - в самом начале процедуры. Т.о., смотрим, что передается в процу (какие значения параметров).
2) В процедуре Send - перед созданием потока; нужны значения m_Str_uid, m_Str, m_int_0, m_int_1
3) В потоке перед вызовом Fire_OnSend - смотрим параметры myAtl
4) В процедуре Fire_OnSend - в самом начале процедуры
5) Оставить в Fire_OnSend тот разбор полетов, который там есть

Дальше запустить тот тест в QA, который был приведен выше, и проанализировать логи.
...
Рейтинг: 0 / 0
Баг или что ???
    #32540977
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал везде как вы сазали ,
но забыл

4) В процедуре Fire_OnSend - в самом начале процедуры

увидел эти глюки понял что это карябится в самой процедуре Fire_OnSend

как только сделал этот пункт ,
глюк этот исчез

даже где "Zakay,Delete" он кидал первому клиенту, он начал
честно выполнять свой долг

ну думаю это пока временно ...

Точно Чудеса ...


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32540986
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ну все равно , не могу теперб добится этого глюка ...

пойду убирать 4-й пункт



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32541008
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно ... :))
убрал 4 пункт , и не могу поймать этот глюк ...


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32541013
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто винды пора переустанавливать ???


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32541080
trayal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может, просто пока ставил / убирал 4 пункт, незаметно для себя исправил ошибку в Fire_OnSend ? ;)
...
Рейтинг: 0 / 0
Баг или что ???
    #32541271
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неа , это я поторопился ,
сам сервер уже почемуто не коверкает, но
вот клиенты ловят криво ...

поэтому я не стал заморачиватся , и переписываю сие твоерение
на VC у меня уже почти все готово , сейчас буду так же тестировать
может быть просто у Борланда что то криво реализованно ?
хотя я реализацию метада Fire_XXX позаимствовал у VC :)



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Баг или что ???
    #32542976
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал на VC++6
работает без проблем !

думаю что то у самих Борландцев кривовать реализованно .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Баг или что ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]