Potrzebuję pomocy z tym wyjątkiem, implementuję wtyczkę NPAPI, aby móc używać lokalnych gniazd z rozszerzeń przeglądarki, w tym celu używam frameworku Firebreath.boost :: exception_detail :: clone_impl <boost :: exception_detail :: error_info_injector <boost :: thread_resource_error>>
Dla gniazd i połączeń Używam funkcji Boost asio z połączeniami asynchronicznymi i pulą wątków 5 wątków roboczych. Mam również termin na wątek, aby wprowadzić limit czasu transmisji.
Moje rozszerzenie workflow z wtyczką jest jak ten:
- Otwarte gniazdo 1 (ta rozpoczyna async_receive a termin async_wait)
- pisać w gnieździe 1
uzyskać odpowiedzi 1
Otwórz inne gniazdo 2
Wri Te w gnieździe 2
gniazdo zapisu 1
pobliżu gniazda 1 (socket.cancel() deadline.cancel() socket.shutdown(), gniazdo uwalnianiu).
odpowiedź Get 2
- gniazdo Zapis 2
- Zamknij gniazdo 2
jak wszystko jest język krzyż i asynchroniczny jest naprawdę trudne do debugowania, ale wszystkie otwarte, zapisu lub blisko nazywane są z javascript oraz odczyt z gniazda 1, które wywołuje otwarte 2, wpisz 2, napisz 1 i zamknij 1 w tej kolejności.
Może evrything mówię jest niezwiązane jak stos wywołań, gdy jest wyjątek nie wykazuje żadnej z moich funkcji, a jedynie pokazać, że jest wewnątrz malloc
że nazywa _heap_alloc_dbg_impl
Ponieważ jest to zwykle nie w Drugi lub trzeci pełny cykl i wydaje się, że dzieje się między krokami 5 i 7.
Ale myślę, że to musi być tak samo związane, jak robienie wszystkiego za pomocą jednego wątku roboczego po prostu rozbija się z wyjątkiem w pierwszym cyklu.
Jestem otwarty na opublikowanie więcej kodu informacyjnego, jeśli jest to potrzebne.
Aktualizacja 1:
Aktualizacja 2:
Istnieje 10 wątki są uruchamiane z:
workPtr.reset(new boost::asio::io_service::work(io_service));
for (int i = 0; i < 10; ++i) {
m_threadGroup.create_thread(boost::bind(&boost::asio::io_service::run, &io_service));
}
The 11th _threadstartex nie wiem kto go uruchomił
W innym wątku (nie tym, który twierdzi, że VS powoduje awarię) jest proces join_all()
, ponieważ moja klasa jest niszczona, ale myślę, że nie powinna, więc może ta awaria jest spowodowana innym wyjątkiem i Firebreath proces zamykania wszystkiego, gdy się zawiesza.
Gdzie jest zgłaszany wyjątek? Opublikuj kod. –
Ile wątków roboczych jest? Wygląda na to, że wątki, które zaczynasz, nigdy się nie kończą. –
Dodano obraz z kodem, stosem połączeń i wątkami. Nie widzę wyjątku, dostaję komunikat o wyjątku z opcjami przerwania lub kontynuowania, a kiedy przerywa to jest stan, zauważ, że nie ma ramki z moim kodem w stosie wywołań (moje klasy to SocketInfo , SocketsApi, Base64), w innym wątku jest jasne, że obiekt npapi został zniszczony i robi to {m_threadGroup.join_all();}, ale nie powinien być w tym momencie niszczony, więc może VS łamie się po innym wyjątek spowodował, że wtyczka zaczęła niszczenie, nie mam pojęcia, jak działa FB. – frisco