Перейти к публикации
  • Сейчас на странице   Всего пользователей: 1   (0 пользователей, 1 гость)

Rooster

Программирование[11]

var  

257 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

Есть программисты тут? С\С++. OS: Windows (используется WINAPI)

Вот есть такая картинка:

image.png.58e39a6a7b73c0252b950e83a5580957.png

Описание:

Есть некая библиотека (API.dll), у которой экспортированы функции (F1, F2).

Есть 2 приложения (APP1, APP2) и обработчики запросов API (hanlder1, handler2).

 

APP1 запрашивает выполнение функции F1 и ждёт ответа. В это время API.dll перебрасывает запрос на handler1 и ждет ответа, и по ответу от handler1 он возвращает результат вызова в APP1.

APP2 выполняет тоже самое, но вызывается handler2.

Это делается параллельно.

 

Теперь вопрос:

Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1?

 

Почему:

Я эмулирую работу handler1, handler2 и мне нужно, чтобы функция не возвращала результат сразу, поэтому я делаю тупо Sleep в экспортированной функции. Но таким образом запрос от APP2 не выполняется, так как там уже занято (не был выполнен return). При этом реальное приложение каким-то образом такие ситуации обрабатывает - не могу понять как.


 

Лучшая в этом мире

4cd5e7dcf57746f698f023a78718.jpg

 

 

Лучшая в мире читает стихи

 

Эксперт в религии
 

Поделиться сообщением


Ссылка на сообщение

не знаю как си, но это разве делается в одной сессии? т.е. разве у каждого обращения APP1 и APP2 не будет свой поток со своим стеком?

Поделиться сообщением


Ссылка на сообщение
DANIS[Oo] написал 9 минут назад:

не знаю как си, но это разве делается в одной сессии? т.е. разве у каждого обращения APP1 и APP2 не будет свой поток со своим стеком?

Я вот тоже не знаю.

Эксперимент показал, что я не получаю ответ во вторую приложуху, пока у меня Sleep от первого запроса не оттикает.


 

Лучшая в этом мире

4cd5e7dcf57746f698f023a78718.jpg

 

 

Лучшая в мире читает стихи

 

Эксперт в религии
 

Поделиться сообщением


Ссылка на сообщение

может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс

Поделиться сообщением


Ссылка на сообщение
DANIS[Oo] написал 1 час назад:

может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс

Слип запускается у меня в транзакционном методе - всё верно.

Но как сделать так, чтоб второй не ждал?


 

Лучшая в этом мире

4cd5e7dcf57746f698f023a78718.jpg

 

 

Лучшая в мире читает стихи

 

Эксперт в религии
 

Поделиться сообщением


Ссылка на сообщение
v1le написал 8 минут назад:
DANIS[Oo] написал 1 час назад:

может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс

Слип запускается у меня в транзакционном методе - всё верно.

Но как сделать так, чтоб второй не ждал?

я слаб в многопоточке, но на сколько знаю, у объектов есть что-то типо монитора, по которому определяется занят ресурс или нет, возможно его нужно будет отключать вручную, но тогда нарушится одно из свойств транзакционности, т.е. в начале потока у общего ресурса было одно значение, а потом, по середине выполнения, стало другое.

 

мне кажется, нужно ввести таймаут на операцию, скажем, если это подключение к БД, тогда, при превышении этого времени, поток будет падать с ошибкой, а второй продолжит работу

Поделиться сообщением


Ссылка на сообщение

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

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


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
v1le написал 2 часа назад:

Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1?

 

Если я сру через жопу, то как кто-то может срать через жопу паралельно со мной?

 

То что ты нарисовал на схемке говорит что у тебя два приложения, у каждого из них подгруженна либа. Либа это, очено грубо, просто набор функций.

Оно, очень грубо, ничем не отличается от тех функций которые ты в своем приложении прямо в коде объявишь и опишешь.

 

И логика работы с ними та же самая. Так что выкини в своем вопросе уточнения про ddlку, ответь так как буд-то это просто функции в коде, и ответишь сам себе.


ward написал 04.01.2022 в 02:54:

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

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
v1le said 1 hour ago:
DANIS[Oo] said 2 hours ago:

может там слип запускается в тразнакционном методе, который обращается к общему ресурсу тогда второй поток будет ждать, пока первый освободит ресурс

Слип запускается у меня в транзакционном методе - всё верно.

Но как сделать так, чтоб второй не ждал?

я б тебе за такие вопросы пизды дал

CriErr, GoldRobot, DANIS[Oo] и 1 другому понравилось это

Поделиться сообщением


Ссылка на сообщение
Гость Президент Nill Kiger
(изменено)

Как как. У каждого процесса своя виртуальная память. В виртуальную память чужого процесса ты можешь залезть толькоч через WriteProcessMemory ReadProcessMemory и низлежащие недокументированные функции ntdll. Можно еще внедриться в чужой процесс через инжект дллки, которая будет чувствовать себя в чужом процессе как дома.

Абстрактно, на уровне юзерспейса - каждому процессу в память копируется своя коппия дллки. По крайней мере каждый процесс так думает.
На уровне ядра в целях экономии памяти коппия создается только для процессов, которые перезаписывают в своей виртуальной памяти какие то байты дллки, что бывает крайне редко.
copy on write.

Экспорируемая функция 1 будет выполняться каждая в своём процессе и в своём потоке, в своём стеке.
Каждому потоку будет выдан своё квант выполнения, в который они эту функцию прокрутят. Пробегутся рипом (инстракшн поинтером по адресам кода дллки).
Когда они это будет делать - на какой стадии выполнение одной функции, на какой другой, одноврменно в разных потоках многоядерного процессора, вообще не ебёт их это, они никак не связаны.


 

v1le said 7 hours ago:

 

Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1?

функция это кусок кода в памяти просто валяющийся. К ней не нужно какой то магический досутп получать. Доступ это просто то что ты знаешь адрес этой функции в загруженной дллке в своем процессе и можешь на неё jmp / call сделать.


Изменено пользователем Президент Nill Kiger

Поделиться сообщением


Ссылка на сообщение

вроде все толково написал не?

Поделиться сообщением


Ссылка на сообщение

Традиция


ward написал 04.01.2022 в 02:54:

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

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
Президент Nill Kiger написал 9 часов назад:

Как как. У каждого процесса своя виртуальная память. В виртуальную память чужого процесса ты можешь залезть толькоч через WriteProcessMemory ReadProcessMemory и низлежащие недокументированные функции ntdll. Можно еще внедриться в чужой процесс через инжект дллки, которая будет чувствовать себя в чужом процессе как дома.

Абстрактно, на уровне юзерспейса - каждому процессу в память копируется своя коппия дллки. По крайней мере каждый процесс так думает.
На уровне ядра в целях экономии памяти коппия создается только для процессов, которые перезаписывают в своей виртуальной памяти какие то байты дллки, что бывает крайне редко.
copy on write.

Экспорируемая функция 1 будет выполняться каждая в своём процессе и в своём потоке, в своём стеке.
Каждому потоку будет выдан своё квант выполнения, в который они эту функцию прокрутят. Пробегутся рипом (инстракшн поинтером по адресам кода дллки).
Когда они это будет делать - на какой стадии выполнение одной функции, на какой другой, одноврменно в разных потоках многоядерного процессора, вообще не ебёт их это, они никак не связаны.


 

v1le написал 17 часов назад:

 

Если результат функции APP1 не был возвращен, то по факту функция не выполнена ещё и return выполнен не был. Каким образом APP2 получает доступ к той же функции, если там уже висит запрос от APP1?

функция это кусок кода в памяти просто валяющийся. К ней не нужно какой то магический досутп получать. Доступ это просто то что ты знаешь адрес этой функции в загруженной дллке в своем процессе и можешь на неё jmp / call сделать.

 

сколько деняк получаешь? можно в джаст дуитах по старому курсу (1дд = 100к рублей), можно в голроботах по старому курсу (1грб = 60к деревянных)

Поделиться сообщением


Ссылка на сообщение
madvlaydin написал 2 минуты назад:

можно в голроботах по старому курсу (1грб = 60к деревянных)

Я ваш попрошу! Нет такой валюты как грб.

Есть Олд Голд Робот. ОГР.

1 ОГР = 60к деревянных.

 

Нынешняя молодеж меня пугает конечно переодически, а потом в биткоины деньги несут.

Kant понравилось это

ward написал 04.01.2022 в 02:54:

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

mazt3r написал 20.09.2019 в 11:27:

ласт оф ас - хуета для лисят и прочих мальчиков с вагиной между ног.

 

Поделиться сообщением


Ссылка на сообщение
GoldRobot написал 2 минуты назад:
madvlaydin написал 6 минут назад:

можно в голроботах по старому курсу (1грб = 60к деревянных)

Я ваш попрошу! Нет такой валюты как грб.

Есть Олд Голд Робот. ОГР.

1 ОГР = 60к деревянных.

 

Нынешняя молодеж меня пугает конечно переодически, а потом в биткоины деньги несут.

да бля давно деньги не обсуждали, уже и забылись наменования валют, это как RUB и RUR

 

  Показать содержимое

image.png.1c4dc7f98e178c9a0abf2be8c55e3573.png бля чё та копейки получаю какие-то

Поделиться сообщением


Ссылка на сообщение

полгода назад кто-то мне предлагал рефку в авито в этом топане, найдись друг:pdanus: 

Время пришло:takpadazhi:

Поделиться сообщением


Ссылка на сообщение

кто то хранит в доларах и живет в россии при этом одновременно? 

Поделиться сообщением


Ссылка на сообщение
Гость Президент Nill Kiger
madvlaydin said 7 hours ago:

сколько деняк получаешь? можно в джаст дуитах по старому курсу (1дд = 100к рублей), можно в голроботах по старому курсу (1грб = 60к деревянных)

нолик получаю. Ни разу в компаниях не работал, да и не нужен я им особо. Сидит хаэр, ищет синиора, мою заявку смотрит -  работал НИГДЕ и гитхаб пустой.
Там до технического собеседования и не дойдёт. К которому готовиться минимум месяц. Мне что щас с серьезным ебалом сидеть алгоритмы вспоминать и задачки решать ?

К тому же я гитом пользуюсь плохо. В мастер ветке всё делаю и мне комфортно. Никакие методологии разработки не известны.
Временами бывает желание поработать где нибудь, потому что офисная атмосфера минимизирует прокрастинацию, я бы там отчасти и своими идеями занимался.
Но щас если куда то идти, то это МАКСИМУМ мидлом в среднюю  компанию на 150к,  в которой ваще всем похуй.
Я сам на своих проектах больше имею гораздо, но это нестабильно. Условно с февраля ни рубля не зафармил.

Если работать где то, то для себя вижу например эту вакансию. https://www.valvesoftware.com/en/jobs?job_id=12
Мне было бы интересно там поработать неважно за какие деньги.
Ради этой вакансии условно месяц я бы потратил на подготовку. Но английский разговорный за месяц я точно не осилю.


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


Щас подумываю впн свой сервис сделать на уровне протонмеил тоже с онион доменам. Впны работать на gentoo/openbsd будут.

Поделиться сообщением


Ссылка на сообщение
(изменено)
Президент Nill Kiger said 18 minutes ago:
madvlaydin said 8 hours ago:

сколько деняк получаешь? можно в джаст дуитах по старому курсу (1дд = 100к рублей), можно в голроботах по старому курсу (1грб = 60к деревянных)

нолик получаю. Ни разу в компаниях не работал, да и не нужен я им особо. Сидит хаэр, ищет синиора, мою заявку смотрит -  работал НИГДЕ и гитхаб пустой.
Там до технического собеседования и не дойдёт. К которому готовиться минимум месяц. Мне что щас с серьезным ебалом сидеть алгоритмы вспоминать и задачки решать ?

К тому же я гитом пользуюсь плохо. В мастер ветке всё делаю и мне комфортно. Никакие методологии разработки не известны.
Временами бывает желание поработать где нибудь, потому что офисная атмосфера минимизирует прокрастинацию, я бы там отчасти и своими идеями занимался.
Но щас если куда то идти, то это МАКСИМУМ мидлом в среднюю  компанию на 150к,  в которой ваще всем похуй.
Я сам на своих проектах больше имею гораздо, но это нестабильно. Условно с февраля ни рубля не зафармил.

Если работать где то, то для себя вижу например эту вакансию. https://www.valvesoftware.com/en/jobs?job_id=12
Мне было бы интересно там поработать неважно за какие деньги.
Ради этой вакансии условно месяц я бы потратил на подготовку. Но английский разговорный за месяц я точно не осилю.


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


Щас подумываю впн свой сервис сделать на уровне протонмеил тоже с онион доменам. Впны работать на gentoo/openbsd будут.

 

@hira88 Я нашёл твоего брата

 

image.png.fffef6523bddd34d0148d758fc0290a6.png


Изменено пользователем Rooster
Lotus, Vemor, madvlaydin и 8 другим понравилось это

Shaman.png.0cdd33d48561cd068bb3c5ee78289381.png Anna.jpeg.03c9b49363298ceec256500a5d522f7d.jpeg Nigga.jpg.f807f2556bdbf68452292a9301494591.jpg

 

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

×
×
  • Создать...