Jump to content
  • Sign Up
  • Recently Browsing   Total Users: 0   (0 members, 0 Guests)

Rooster

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

var  

169 members have voted

You do not have permission to vote in this poll, or see the poll results. Please sign in or register to vote in this poll.

Recommended Posts

Есть программисты тут? С\С++. 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

 

 

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

 

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

Share this post


Link to post

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

Share this post


Link to post
DANIS[Oo] написал 9 минут назад:

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

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

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


 

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

4cd5e7dcf57746f698f023a78718.jpg

 

 

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

 

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

Share this post


Link to post

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

Share this post


Link to post
DANIS[Oo] написал 1 час назад:

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

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

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


 

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

4cd5e7dcf57746f698f023a78718.jpg

 

 

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

 

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

Share this post


Link to post
v1le написал 8 минут назад:
DANIS[Oo] написал 1 час назад:

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

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

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

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

 

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

Share this post


Link to post

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

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


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

Share this post


Link to post
v1le написал 2 часа назад:

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

 

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

 

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

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

 

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


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

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

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

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

 

Share this post


Link to post
v1le said 1 hour ago:
DANIS[Oo] said 2 hours ago:

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

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

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

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

Share this post


Link to post
Guest Президент Nill Kiger

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

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

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


 

v1le said 7 hours ago:

 

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

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


Edited by Президент Nill Kiger

Share this post


Link to post

Традиция


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

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

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

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

 

Share this post


Link to post
Президент Nill Kiger написал 9 часов назад:

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

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

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


 

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

 

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

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

 

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

Share this post


Link to post
madvlaydin написал 2 минуты назад:

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

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

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

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

 

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

Kant likes this

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

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

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

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

 

Share this post


Link to post
GoldRobot написал 2 минуты назад:
madvlaydin написал 6 минут назад:

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

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

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

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

 

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

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

 

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

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

Share this post


Link to post

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

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

Share this post


Link to post

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

Share this post


Link to post
Guest Президент Nill Kiger
madvlaydin said 7 hours ago:

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

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

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

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


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


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

Share this post


Link to post
Президент 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


Edited by Rooster

ph0yAPF.png

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...