Size: a a a

2021 July 01

SD

Sergey Dobychin in pro.cxx
Может быть из-за того, что порядок инициализации static-ов не определен?
источник

SD

Sergey Dobychin in pro.cxx
tg_notifier вроде как инициализируется еще до того, как вызовется функция getInstance
источник

S

Salt in pro.cxx
На siof наткнулся?
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
Хм, ну в коде написанном мной только один вот этот static initialization - разве что в бусте или других внешних либах что-то может быть static?
источник

ПК

Побитый Кирпич... in pro.cxx
Статичных локальных переменных определён
источник

SD

Sergey Dobychin in pro.cxx
Да, я потом заметил, что это функция, не стал удалять сообщение
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
мне кажется, что если я перепишу всю логику без использования boost-asio, то всё будет работать, так как зависает именно на части которая относится к нему…
Если сделать паузу, то прога именно где-то в io_context слушает собития…

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

I

Ioann_V in pro.cxx
Ребят, а верхний код эквиваленте ли нижнему на x64 платформе? Если да, то как сделать один выхлоп у компиля в АСМ?
источник

I

Ioann_V in pro.cxx
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
Ну вот я создал минимальный пример кода, который зависает с boost-asio - там 3 строчки кода написано. Может, кто-то глянуть, что я не так делаю?...
https://github.com/Pilipets/FreezeProject

//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.

Solution состоит из одной AsioFreeze.dll и Usage.exe
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;
};

Edited:
По дебагеру прога висит в io_context - C:\Mine\Additional\vcpkg\installed\x64-windows-v140\include\boost\asio\detail\impl\win_iocp_io_context.ipp, хотя почему - не понятно...
источник

IZ

Ilia Zviagin in pro.cxx
Важно, где этот код выполняется.
И важен код MyClass::getInstance();
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
MyClass& MyClass::getInstance()
{
static MyClass ins;
return ins;
}

Вот код GetInstance.

1. Я делаю билд.dll, которая содержит класс MyClass.
2. Есть Source.cpp, куда я линкую .dll и вызываю MyClass& ins = MyClass::getInstance(); и т.д. ...
источник

ПК

Побитый Кирпич... in pro.cxx
А почему не должен зависать?
источник

IZ

Ilia Zviagin in pro.cxx
Тут в getInstance должен быть неявный мьютекс/семафор и признак инициализации.
Поэтому вызывай этот метод В MAIN — и думаю, будет всё  ок.
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
В смысле? Не понятна причина по которой он может зависать...
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
Хм, так там же static переменная вместо mutex, признака инициализации - этого недостаточно?
источник

D

Dmitriy in pro.cxx
Должно быть достаточно. Ситуация интересная
источник

D

Dmitriy in pro.cxx
Пробовал собирать шлангом?
источник

IZ

Ilia Zviagin in pro.cxx
этого достаточно, но ГДЕ ты этот код вызываешь?
источник

IZ

Ilia Zviagin in pro.cxx
это
 MyClass& ins = MyClass::getInstance();
//MyClass ins;
ins.ioc.post([&] {


где вызывается?
источник