Size: a a a

IT KPI C/C++ ХВ (не UB)

2021 July 01

AW

Alexander Wizaral in IT KPI C/C++ ХВ (не UB)
Если есть такая возможность, то советую расписать создание этой всей лабуды через cmake, а дальше оно само создаст, скомпонует и свяжет все нужные проекту штуки. Но если не, то:

Под каждую библиотеку, которую нужно собирать делаешь отдельный проект.

Если один проект использует другой, то по нему ПКМ и выбираешь добавить референс. Там откроется окошко со всеми проектами в солюшене и надо будет проставлять галочки на необходимых.

Что касается файлов, то все определения функций, классов, etc выносятся в .hpp файлы. Если есть шаблонные классы/функции, то они должны быть целиком в хедерах.

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

AW

Alexander Wizaral in IT KPI C/C++ ХВ (не UB)
А ещё кинь скрины, чё там у тебя не получается, а то гадать на кофейной гуще с самого утра как-то не оч(
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
https://github.com/Pilipets/FreezeProject

Я создал минимальный пример проекта, который зависает...
Solution состоит из AsioFreeze.dll и Usage.exe.

//Usage.exe -> Source.cpp

MyClass& ins = MyClass::getInstance();
//MyClass ins;
ins.ioc.post([&] {
 boost::system::error_code err;
 boost::asio::deadline_timer(ins.ioc, boost::posix_time::milliseconds(1000)).wait(err);
});

Вот это висит при статической инициализации, но работает без проблем, если сделать MyClass ins.

struct ASIOFREEZE_API MyClass {
MyClass();
~MyClass();
static MyClass& getInstance();

boost::asio::io_context ioc;
boost::asio::executor_work_guard<boost::asio::io_context::executor_type> work_guard;
std::thread worker_thread;
};
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Кто-то может подсказать, что здесь не так в использовании буста?
источник

VD

Vlad Doc in IT KPI C/C++ ХВ (не UB)
А не проще будет заатачиться дебагером и посмотреть где виснет?
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
ну оно висит в io_context - C:\Mine\Additional\vcpkg\installed\x64-windows-v140\include\boost\asio\detail\impl\win_iocp_io_context.ipp
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
но вопрос в том, почему ...
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
В общем, если кому-то интересна эта проблема, то мне там +- подсказали ошибки в @ProCxx
источник

A

András in IT KPI C/C++ ХВ (не UB)
Я не буду пропускати всі ці повідомлення через твій фікс)
источник

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
земля пухом
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
А кто-то писал здесь какую-то логику инициализации - как её делать правильно?
источник

MS

Meow Sav in IT KPI C/C++ ХВ (не UB)
Чисто для справки, помню вставал на грабли того, что там нельзя создавать потоки
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
А std::* там можно юзать хоть?
источник

MS

Meow Sav in IT KPI C/C++ ХВ (не UB)
Ну, cout вроде работал xD
источник

AP

Alexander Pavlyuchuk in IT KPI C/C++ ХВ (не UB)
винапи он такой ахахахха
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
ну тип мне нужно заменить вот этот код

MyClass& MyClass::getInstance()
{
static MyClass ins;
return ins;
}

на инициализацию внутри .dll...
источник

MS

Meow Sav in IT KPI C/C++ ХВ (не UB)
А это вызывалось из приложения которое использует длл?
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
+
источник

 P

 ‌‌Gleb Pilipets... in IT KPI C/C++ ХВ (не UB)
Короче, там непонятно пока что почему, но io_context, который мембет MyClass не завершает работу в таком случае, и вся прога висит...
источник

MS

Meow Sav in IT KPI C/C++ ХВ (не UB)
class TextureExample {
public:
   TextureExample() {
       Events::drawingEvent += [] {
       };
   }
} texture_init;

Ну вот вызовется конструктор при загрузке длл
источник