Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запрет на завершение потока

54K
24 января 2011 года
gaspar_la
7 / / 29.01.2010
Подскажите, люди знающие, есть ли возможность запретить завершение потока, пока он (поток) не доделает свои дела. Точнее аналог pthread_setcancelstate() из Posix.

Суть проблемы:
Есть закрытый движок (назовём его Playground SDK). При завершении игры он, видимо, вызывает что-то типа ExitProcess. Надо, что бы при закрытии игры выскакивало окно врапера (назовём его SoftwarePassport Armadillo) и висело пока пользователь не закроет его. Так вот это врапер цепляется к игре как поток, а исходя из выше сказанного, окно врапера уничтожается даже толком не появившись.
1
25 января 2011 года
kot_
7.3K / / 20.01.2000
Вероятнее всего - нет.
Если надо отслеживать завершение и т.п. - используй отдельный процесс.
Тем более у армадиллы вроде для этого есть механизмы.
54K
25 января 2011 года
gaspar_la
7 / / 29.01.2010
с отслеживанием завершения игры Армадилла прекрасно справляется и выводит своё окно. а вот игра всё на корню рубит, закрывая и себя и Армадиллу.
1
25 января 2011 года
kot_
7.3K / / 20.01.2000
взаимоисключающие параграфы детектед?
определись все таки - "прекрасно справляется" либо "накорню рубит"
54K
25 января 2011 года
gaspar_la
7 / / 29.01.2010
видимо не корректно объясняю...

Армадилло цепляется к игре как поток

при закрытии игры Армадилло отлавливает сие событие и начинает строить своё окно (Purchase Dialog)

в основном потоке игры вызывается что-то типа ExitProcess (точно не знаю, так как движок, на котором сделана игра, закрытый)

игра рубит все свои потоки, включая поток Армадилло, что заставляет закрыться "Purchase Dialog" (он даже не успевает создаться полностью)
54K
25 января 2011 года
gaspar_la
7 / / 29.01.2010
для работы с Армадиллой существует ArmAccess.dll, с помощью которой можно вывести "Purchase Dialog" ручками.

выводить данное окно в основном потоке не вариант, так как игра зависает, не закрывшись.

решил создать отдельный поток и в нём выводить это окно, но этот поток опять таки рубиться процессом игры (отсюда и стал подозревать наличие ExitProcess, т.к. на официальном форуме клятвенно заверяли, что ничего подобного нет)

вот этому потоку и хочу дать запрет на принудительное завершение
1
25 января 2011 года
kot_
7.3K / / 20.01.2000
да. это понятно.
посмотри документацию по армадрилле - с большей вероятностью там должен быть ответ на твой вопрос, либо задай вопрос разработчикам.
ИМХО (это предположение) с самим процесом игры необходимо работать по другому - отслеживая состояние процесса (игры). В противном случае, естественно что процесс игры завершает все потоки. Но это абстрактные предположения - в любом случае надо смотреть доки.
Либо еще вариант - попробовать ставить хук/брикпойнт на вызов функции/события.
54K
25 января 2011 года
gaspar_la
7 / / 29.01.2010
с Армадиллой всё нормально, другие приложения работают на УРА.
проблема в движке... а на оф. форума не особенно чешутся
да и факт того, что движок закрытый затрудняет жизнь...

спасибо за помощь...
8.2K
25 января 2011 года
bagie2
299 / / 26.10.2008
если вызывается действительно ExitProcess(FatalExit/FatalAppExit) то просто сделайте дллку, вызовите LoadLibrary один раз при запуске приложения и отлавливайте в DllMain fdwReason=DLL_PROCESS_DETACH оно сработает. если используется TerminateProcess, то нет.

тока метод с дллкой - нулевая защита получается, если это защита. и всё равно вам надо для начала OllyDbg взять и поглядеть конкретно в чем проблема.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог