Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ?? / 16 сообщений из 16, страница 1 из 1
26.04.2004, 12:54
    #32496628
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
тоесть запускаю поток
Код: plaintext
1.
2.
3.
   hExit = CreateEvent(NULL,TRUE,FALSE,NULL);
   hSend = CreateEvent(NULL,TRUE,FALSE,NULL);
   _beginthread(&StartThread, 16384 ,&par);


реализация StartThread выглядит так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void __cdecl  StartThread(void* Params)
{
   CoInitializeEx(NULL,COINIT_MULTITHREADED);
 //  ThreadParam * tp=(ThreadParam *)Params;
   HANDLE pHandles[ 2 ];
   pHandles[ 0 ] = hExit;
   pHandles[ 1 ] = hSend;
   while( 1 )
   {
     switch(WaitForMultipleObjects( 2 ,pHandles,false,INFINITE))
     {
       case WAIT_OBJECT_0: 
         break;
       case WAIT_OBJECT_0+ 1 :
         ShowMessage( "hSend" );
         break;
      }
   }
  delete tp;
  ::_endthread();
  CoUninitialize();
}


Поток запускается , работает

но если я вызову теперь метод, где будет

SetEvent(hSend) или SetEvent(hExit)

то нифига ни чего не произойдет ,

причем , я ради эксперемента сделал все это в новом приложении ,
не СОМ то там все работает на ура ...





i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
27.04.2004, 08:35
    #32497820
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
А если создать именованные события?

Чесно говоря, не понял, как клиент получает хэндлы этих событий у себя?

А можно ещё именованые мутехы сделать. Они точно уникальны в рамках одной системы.
...
Рейтинг: 0 / 0
27.04.2004, 09:30
    #32497894
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Клиент ни как не получает , это внутри СОМ.
пробовал и именные евенты создовать такая же муть ...

просто идея была токова чтобы запустить поток
и в нем уже вызывать метод оповешение о событие клиентов .
тобищь Fire_OnSend (...)





i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 10:34
    #32499939
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Как-то всё сложно.

Ну а WaitForSingleObject работает?

А то, чтоб не мучиться, завести семафор, и по WaitForSingleObject с него оповещать клиентов.
...
Рейтинг: 0 / 0
28.04.2004, 11:34
    #32500142
_Konst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Не знаю точно ли по теме, но вот какое предостережение я вычитал в msdn

msdnUse caution when calling the wait functions and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. A thread that uses a wait function with no time-out interval may cause the system to become deadlocked. Two examples of code that indirectly creates windows are DDE and COM CoInitialize. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than WaitForMultipleObjects.

CoInitialize - это как раз твой случай.
Может вся система (COM) вешается, потому и не происходит выхода из WaitForMultipleObjects?
...
Рейтинг: 0 / 0
28.04.2004, 12:24
    #32500322
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Да я уже переделал как на мелкосовтском сайте расписано было ,
+ некоторую реализацию событий как на VC :) (так как все пытаюсь сделать на Buildere)

только теперь одно но

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


сейчас буду пробовать как они работают если находятся , на разных компах .


но вот если как клиент вступает в эту роль MSSQL
то нифига не происходит ...


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 12:40
    #32500366
_Konst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Ничего не понял.. :(
но желаю успехов.
Слушай JibSkeart, а у тебя с разных компов пользователи под одним и тем же account-ом будут коннектится к сом - серверу или под разными??
Я что-то никак не пойму, как сделать, если каждый клиент под своим account-ом, чтобы exe-сервер загружался только один раз для всех?
...
Рейтинг: 0 / 0
28.04.2004, 12:58
    #32500426
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Что бы для каждого коннекта создавался один экземпляр кокласса нужно обявить его как Синглетон (SINGLETON)


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 13:16
    #32500490
_Konst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Нет, нужно, чтобы всегда был всего один экземпляр exe-Сервера - один процесс!
А у меня если на трех разных компах залогинится под разными account-ами и запустить с них программу-клиент, то стартуют три процесса сервера на машине-сервере. Если на все три компа зайти под одинаковым account-ом, то СОМ-сервер стартует в единственном экземпляре. Как бы сделать тоже самое и для разных account-ов, кроме прописывания явного account-а в COSERVERINFO?
...
Рейтинг: 0 / 0
28.04.2004, 13:28
    #32500530
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Может с настройками в DCOM ?
попробуй поигратся с параметрами безопасности итд .
у меня если я запущю с трех разных машин клиентов
ну допустим win2000 (2-е машины), win98 то запустится один экземпляр сервера .
причем на на Win2k как админ а на win98 как гость типа .
но у меня для этого DCOM сервера вся безопастность итд обрублена




i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 13:30
    #32500535
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Ну все и с MSSQL-ем разобрался теперь и с него события срабатывют :)

i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 13:42
    #32500590
_Konst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Поздравляю!

JibSkeartМожет с настройками в DCOM ?
попробуй поигратся с параметрами безопасности итд .
у меня если я запущю с трех разных машин клиентов
ну допустим win2000 (2-е машины), win98 то запустится один экземпляр сервера .
причем на на Win2k как админ а на win98 как гость типа .
но у меня для этого DCOM сервера вся безопастность итд обрублена
А какое имя пользователя для процесса сервера у тебя пишет TaskManager?
...
Рейтинг: 0 / 0
28.04.2004, 14:04
    #32500675
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Всмусле ??
у меня диспетчер задачь не показывает имен пользователей ...
если что у меня обычная рабочая группа, хотя не думаю что это
как то меняет суть :)


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 14:04
    #32500677
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
я имею ввиду что он запускается на моем компе win2k



i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
28.04.2004, 14:26
    #32500740
_Konst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Все разобрался! :)
Надо было просто СОМ-сервер самому запустить на серверной машине, предварительно выставив в реестре признак "Launch as interactive user". Тогда клиенты со всех прочих машин начинают с ним нормально общаться. А если кто-то из клиентов пытается обратиться к еще не запущенному серверу, то его ждет облом.
...
Рейтинг: 0 / 0
28.04.2004, 14:56
    #32500844
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему внутри COM не ловит SetEvent(...) WaitForMultipleObjects ??
Хмм ...

учтем на будущее но пока у меня все без проблем :)
хотя кто знает может натолкнусь в дальнейшей эксплуатации


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


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