@ProCxx

Страница 2274 из 2477
yuri
10.08.2018
07:47:28
IIS же на фиберах. В смысле, найдутся любители.

Google
Nikita
10.08.2018
07:48:10
О, сматри что нашел https://msdn.microsoft.com/en-us/library/ms691104(v=VS.90).aspx
Бегло глянул - судя по всему это коллбэк на событие вызова какого то хендлера, не более того

Nik
10.08.2018
07:48:14
Ну вот же, вроде оно
Только вот называется оно Request-Level module :)

Nikita
10.08.2018
07:52:29
https://forums.iis.net/t/1167602.aspx?Developing+Native+Handlers
Спасибо, хотя пример на MSDN абсолютно не информативный, тупо в лог пишется мол вот запустился какой то хэндлер :(

Antony
10.08.2018
08:07:14
а, т.е. всякие SA - 7 и пр. авторы потом только в блогах могут писать?
Обычно в блогах такое не пишут. В основном просто - приняли / не приняли. Цифры вроде как запрещено публиковать где-то кроме бумаг ISO

Antony
10.08.2018
09:06:57
А почему такая строгость?
Ну потому что следующий шаг, это "Executors не приняли, потому что некий antoshkka@ сказал что предложение огромное, раздутое и не пользуется популярностью на не GPU вычислениях. А ещё...." И тогда обсуждения скатятся в срач, а работа в комитете встанет :)

Roman
10.08.2018
09:39:53
2. Да, чекнул через GDIView, хватило, хотя вариант с xperf start -on PROC_THREAD+LOADER+OB_HANDLE+PROFILE -stackwalk Profile+HandleCreate+HandleClose+HandleDuplicate конечно пободрее.

Google
Roman
10.08.2018
09:41:12
DeviceContext всему виной оказался

Ilia
10.08.2018
09:41:28
1, Это понятно, но в диспетчере будет без подробностей, мне нужны уже детали.
с амые детали -- это где и когда вызвалась функция выделения GDI объекта, который потом не был освобождён. Эту информацию тебе никто не даст. :(

Roman
10.08.2018
09:42:34
Можно через procmon выдрать
не слышал о такой утилите

Alex Фэils?︙
10.08.2018
09:42:57
Process Monitor ru.wikipedia.org Бесплатная утилита для 32-битных и 64-разрядных операционных систем Microsoft Windows, разработанная Sysinternals, и затем приобретённая Microsoft Corporation, которая объединила в себе сразу 2 утилиты, FileMon и RegMon, и предоставляет пользователям мощный инструмент для мониторинга файловой систем

Roman
10.08.2018
09:43:42
в общем не надо делать GetDC и после не вызывать ReleaseDC =)

Ilia
10.08.2018
09:43:56
Можно через procmon выдрать
Так надо выделение с освобождением сматчить, и удалить из рассмотрения те пары, где есть матч. А далее рассматривать те, что остались. И это порядка нескольких тысяч пар в приложении обычно.

Ну тут уже ковырять, да
Легче думаю обернуть ВСЕ GDI объекты по RAI, и навсегда о проблеме забыть.

Alex Фэils?︙
10.08.2018
09:44:46
в общем не надо делать GetDC и после не вызывать ReleaseDC =)
Да, я бы scoped_dc сделал бы с автодропом из скоупв

Roman
10.08.2018
09:45:20
Легче думаю обернуть ВСЕ GDI объекты по RAI, и навсегда о проблеме забыть.
я думал обёртка MFC в виде CDC класса уже это делает

Ilia
10.08.2018
09:45:23
Легче думаю обернуть ВСЕ GDI объекты по RAI, и навсегда о проблеме забыть.
Для этого надо только ПЕРЕД этим убедиться, что утечка реально есть, чтобы не делать всё зазря. Вот для этого утилиты -- ОК

Roman
10.08.2018
09:45:36
а я оказался не прав=)

Ilia
10.08.2018
09:45:56
я думал обёртка MFC в виде CDC класса уже это делает
Так пока не говорили, что там именно MFC проект

Roman
10.08.2018
09:46:24
Что думал обёртка MFC в виде CDC класса уже это делает.

собственно CDC Обёртка над HDC

и этот самый HDC надо удалять ручками, и как бы вроде бы логично чтобы обёртка этим занималась

Sasha
10.08.2018
09:47:21
Всем привет) Помогите

Кто-нибудь программировать на си контроллеры?

Google
Ilia
10.08.2018
09:47:37
Что думал обёртка MFC в виде CDC класса уже это делает.
Обёртка-то делает, но можно выделить GDI и мимо обёртки. К тому же, DC далеко не единственный вид GDI ресурса.

Sasha
10.08.2018
09:47:43
Прогоаммировал*

Ilia
10.08.2018
09:48:45
и этот самый HDC надо удалять ручками, и как бы вроде бы логично чтобы обёртка этим занималась
Кстати, если ты найдёшь подтверждение утечки, то поймёшь, какого вида ресурс течёт, это в общем сильно поможет. Если вид ресурса редкий, то вообще будет легко

Roman
10.08.2018
09:50:27
но потёк именно DC

Max
10.08.2018
10:20:09
https://imgur.com/ET8PNEh Чё-то ору )

Timur
10.08.2018
11:01:16
с амые детали -- это где и когда вызвалась функция выделения GDI объекта, который потом не был освобождён. Эту информацию тебе никто не даст. :(
при правильном выбранном профиле и правильно настроенных символах WPA может показать стеки собранные метриками WPR/xperf

Ilia
10.08.2018
11:51:20
Ребят, а кто-нибудь пользовался библиотекой NAG(Numerical Algorithms Group): https://www.nag.com ? Есть вопрос по использованию функций нахождения решений для PDE

А кто знает, что за такой хитрый зверь в VC с 2015 ой -- Concurrency Runtime? The Concurrency Runtime for C++ helps you write robust, scalable, and responsive parallel applications. It raises the level of abstraction so that you do not have to manage the infrastructure details that are related to concurrency. You can also use it to specify scheduling policies that meet the quality of service demands of your applications. Use these resources to help you start working with the Concurrency Runtime.

Andrey
10.08.2018
12:55:29
Вроде это мидлваре на которой часть библиотеки PPL работает. Но они вроде потихоньку перетаскивают это дело в обычный рантайм

https://msdn.microsoft.com/en-us/library/ee207192.aspx

Andrey
10.08.2018
13:11:16
Ну насколько я понимаю тем что она более тесно "сотрудничает" с виндой. Опенсорсный PPL для никсов как раз на std::thread

Ну то есть видимо для винды лучше идти в конкаренси рантайм, а для портируемости лучше не заморачиваться и пользоваться стандартными средствами

Nik
10.08.2018
18:17:25
Sergey
10.08.2018
19:49:54
В PPL есть конкурентные структуры данных, не lock free, но тем не менее хорошие

В STL пока не завезли такого

Alexander
10.08.2018
20:42:55
Что такое ppl
parallel patterns library

Ilia
10.08.2018
21:01:03
У нас просто в нашем новом проекте это заюзали, вот я и думаю, к добру это или не к добру...

Google
Dmitry
10.08.2018
21:30:03
Nik
10.08.2018
21:51:36
У нас просто в нашем новом проекте это заюзали, вот я и думаю, к добру это или не к добру...
Профайлер натравите да посмотрите, к добру или нет. Мы выпилили в итоге и в наших гайдах жирными буквами написано "Не использовать, ибо мы задолбались вычищать это Г. из кода".

Antony
11.08.2018
07:21:32
Понятно по цвету дыма :) а как дела с constexpr cast char/void и уже наверное byte заодно указателей?
В ближайшем времени не будет. Там какой-то ад с добавлением такого функционала в компиляторы.

Дед Пегас
11.08.2018
10:55:32
В ближайшем времени не будет. Там какой-то ад с добавлением такого функционала в компиляторы.
Сори за оффтоп, но из твоих родных никто не был в ракетостроении?

Alex Фэils?︙
11.08.2018
21:00:07
А почему вы отвечаете вопросом на вопрос?

Ignat
11.08.2018
21:09:21
а Вы таки антисемит?

Дед Пегас
11.08.2018
21:43:59
А почему вы спрашиваете?
Был такой Полухин в КБ «Салют» =)

Alexandr
12.08.2018
05:56:04
Посонэ. Задача така. Нужно выделить executable memory, запихать в нее простой helloworld, прочтенный с диска и выполнить. Собстна. Когда я исполняю ассемблерный код, найденый в примере того, как это сделать - все нормально. Но когда я пытаюсь выполнить helloworld, то вылазит сегфолт. Это хелловорд #include <iostream> int main(int argc, char const *argv[]) { std::cout << "Hello World!" << '\n'; return 0; }Это то, что я пытаюсь сделать #include <sys/mman.h> #include <vector> #include <fstream> #include <iostream> typedef unsigned (*asmFunc)(void); int main(int argc, char *argv[]) { std::streampos fileSize; std::ifstream file("hw", std::ios::binary); // get its size: file.seekg(0, std::ios::end); fileSize = file.tellg(); file.seekg(0, std::ios::beg); // read the data: std::vector<unsigned char> program(fileSize); file.read((char*) &program[0], fileSize); /*program.push_back(0xb8); program.push_back(0x00); program.push_back(0x11); program.push_back(0xdd); program.push_back(0xee); program.push_back(0xc3);*/ std::cout << "Загрузка программы: " << "hw" << '\n'; std::cout << "Выделение исполняемой памяти в размере " << program.size() << '\n'; void * virtualCodeAddress = 0; virtualCodeAddress = mmap( NULL, program.size(), //size in bytes PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0 ); std::cout << "Аддрес: " << virtualCodeAddress << '\n'; std::cout << "Загрузка программы в исполняемую память: "; unsigned char * tempCode = (unsigned char *) (virtualCodeAddress); for (size_t i = 0; i < program.size(); i++) { tempCode[i] = program[i]; } std::cout << "Готово!" << '\n'; asmFunc myFunc = (asmFunc) (virtualCodeAddress); std::cout << " ИСПОЛНЕНИЕ" << '\n'; unsigned out = myFunc(); std::cout << " ИСПОЛНЕНИЕ ЗАВЕРШЕНО " << '\n'; }Гуглить пробовал, не получилось



Mikhail Voronov
12.08.2018
06:16:42
Посонэ. Задача така. Нужно выделить executable memory, запихать в нее простой helloworld, прочтенный с диска и выполнить. Собстна. Когда я исполняю ассемблерный код, найденый в примере того, как это сделать - все нормально. Но когда я пытаюсь выполнить helloworld, то вылазит сегфолт. Это хелловорд #include <iostream> int main(int argc, char const *argv[]) { std::cout << "Hello World!" << '\n'; return 0; }Это то, что я пытаюсь сделать #include <sys/mman.h> #include <vector> #include <fstream> #include <iostream> typedef unsigned (*asmFunc)(void); int main(int argc, char *argv[]) { std::streampos fileSize; std::ifstream file("hw", std::ios::binary); // get its size: file.seekg(0, std::ios::end); fileSize = file.tellg(); file.seekg(0, std::ios::beg); // read the data: std::vector<unsigned char> program(fileSize); file.read((char*) &program[0], fileSize); /*program.push_back(0xb8); program.push_back(0x00); program.push_back(0x11); program.push_back(0xdd); program.push_back(0xee); program.push_back(0xc3);*/ std::cout << "Загрузка программы: " << "hw" << '\n'; std::cout << "Выделение исполняемой памяти в размере " << program.size() << '\n'; void * virtualCodeAddress = 0; virtualCodeAddress = mmap( NULL, program.size(), //size in bytes PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0 ); std::cout << "Аддрес: " << virtualCodeAddress << '\n'; std::cout << "Загрузка программы в исполняемую память: "; unsigned char * tempCode = (unsigned char *) (virtualCodeAddress); for (size_t i = 0; i < program.size(); i++) { tempCode[i] = program[i]; } std::cout << "Готово!" << '\n'; asmFunc myFunc = (asmFunc) (virtualCodeAddress); std::cout << " ИСПОЛНЕНИЕ" << '\n'; unsigned out = myFunc(); std::cout << " ИСПОЛНЕНИЕ ЗАВЕРШЕНО " << '\n'; }Гуглить пробовал, не получилось
почитайте про PE/ELF форматы

Alexandr
12.08.2018
06:18:30
@voronovm thx

Max
12.08.2018
07:39:48
а почему нельзя то, что надо с диска прочитать и запустить оформить в виде .so/dll и подгрузить/запустить когда нужно ?

Kathu
12.08.2018
12:21:35
Посонэ. Задача така. Нужно выделить executable memory, запихать в нее простой helloworld, прочтенный с диска и выполнить. Собстна. Когда я исполняю ассемблерный код, найденый в примере того, как это сделать - все нормально. Но когда я пытаюсь выполнить helloworld, то вылазит сегфолт. Это хелловорд #include <iostream> int main(int argc, char const *argv[]) { std::cout << "Hello World!" << '\n'; return 0; }Это то, что я пытаюсь сделать #include <sys/mman.h> #include <vector> #include <fstream> #include <iostream> typedef unsigned (*asmFunc)(void); int main(int argc, char *argv[]) { std::streampos fileSize; std::ifstream file("hw", std::ios::binary); // get its size: file.seekg(0, std::ios::end); fileSize = file.tellg(); file.seekg(0, std::ios::beg); // read the data: std::vector<unsigned char> program(fileSize); file.read((char*) &program[0], fileSize); /*program.push_back(0xb8); program.push_back(0x00); program.push_back(0x11); program.push_back(0xdd); program.push_back(0xee); program.push_back(0xc3);*/ std::cout << "Загрузка программы: " << "hw" << '\n'; std::cout << "Выделение исполняемой памяти в размере " << program.size() << '\n'; void * virtualCodeAddress = 0; virtualCodeAddress = mmap( NULL, program.size(), //size in bytes PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0 ); std::cout << "Аддрес: " << virtualCodeAddress << '\n'; std::cout << "Загрузка программы в исполняемую память: "; unsigned char * tempCode = (unsigned char *) (virtualCodeAddress); for (size_t i = 0; i < program.size(); i++) { tempCode[i] = program[i]; } std::cout << "Готово!" << '\n'; asmFunc myFunc = (asmFunc) (virtualCodeAddress); std::cout << " ИСПОЛНЕНИЕ" << '\n'; unsigned out = myFunc(); std::cout << " ИСПОЛНЕНИЕ ЗАВЕРШЕНО " << '\n'; }Гуглить пробовал, не получилось
хелло ворлд разве не должен быть в виде машинных команд чтобы его так в память подгружать? почитай что такое компиляция и линковка и как из текста программа превращается в исполняемый файл

Страница 2274 из 2477