![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Народ, привет.
Задачка такая. Есть два приложения. Одно приложение должно сгенерировать некое событие, а другое приложение должно это событие поймать. Событие должно быть все-равно каким, но оно должно быть уникальным (не эмуляция нажатия на кнопку Enter) Есть ли где-то пример, как генерятся события и как они ловятся? Или подскажите какие методы нужно смотреть. Заранее спасибо за ответы ![]() |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
google IPC Remoting SendMessage Pipes
-------------------- СУВ, Partizan. |
|||
|
||||
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
А без межпроцессорного взаимодействия никак?
Два приложения будут всегда выполняться на одной машине. |
|||
|
||||
archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Два приложения - два процесса. IPC - специальный протокол, созданый для взаимодействия разных процессов, на одной машине
Используй IPC Remoting -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет ![]() И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Мне не надо сообщениями меняться.
Нужно с делать событие в винде одной программой, чтобы вторая программа по этому событию смогла завершиться. Существуют же события нажатия на кнопки и т.д. Разве нельзя в одной программе сгенерировать событие, послать его в винду. А другая программа это событие словила. Для чего же тогда нужны события? |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Да, только эти "события" назваются Messages - сообщения. |
|||
|
||||
archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Ну если просто завершение программы - ты просто можешь кильнуть процесс. А там отловить какой-то аппликейнишЕкзит, и сделать очистку
Отсылать мессаги - залазить в винапи. Как по мне, то программируя на шарпе, надо стараться как можно реже туда залазить ![]() Partizanа, был и SendMessage -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет ![]() И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
vlsaf |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Просто кильнуть программу самому очень хочется..
Программа должна разорвать соединение с SQL сервером и должна закрыть два потока, а уже потом завершиться. Если я сделаю Kill, то что будет со потоками, который создал основной процесс? Они захлопнутся или так дальше и будут крутиться? |
|||
|
||||
archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
я же написал) Неуверен правда, но должно работать. Килять нада правильно.
А в программе отлавливаешь например Application.ApplicationExit. Там чистишь все что надо. Соединения разрываешь. Кстати, потоки при завершении поубиваються сами, соединение тоже должно закрыться (для него диспоуз вызоветься). Но наверное, гламурнее будет его самостоятельно убить в вышеуказаном событии -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет ![]() И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Пайпы попробуй) Один открывает пайп и ждёт сообщений, второй - когда нужно говорит в пайп "Ищезни с глаз долой".
Первый смотрит...ага...деликатно просят закрыться...и закрывается ![]() Но вообще наверно ещё можно посмотреть WCF как более актуальную замену Remoting ![]() -------------------- СУВ, Partizan. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Убийцы и пайпы
![]() vlsaf, почитай про EventWaitHandle. Одна прога создаст событие и будет его ждать. Вторая - откроет и выставит в signaled. |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
![]() -------------------- СУВ, Partizan. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Если мне не изменяет память, в случае, когда поток, захвативший EventWaitHandle, завершается, не освободив его, никакого исключения не возникнет - и может образоваться deadlock.
В этом плане мне больше нравится Mutex: он при попытке захватить мьютекс, который был захвачен ныне завершившимся потоком, сгенерирует AbandonedMutexException. Это сообщение отредактировал(а) Idsa - 3.4.2009, 07:17 |
|||
|
||||
archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Эм.. А если надо пару инстансов приложений? Вряд ли оно будет работать как синглтон. Пахнет химией
![]() vlsaf, смотри сколько у тя вариантов решения ![]() ![]() -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет ![]() И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Поток не захватывает EventWaitHandle, он дожидается его установки в signaled. Ничего не захватывается - не надо ничего освобождать. Deadlock - это когда два потока захватывают каждый по своему Mutex-у и после этого пытаются захватить чужой Mutex (или любой другой ресурс) |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |