如何使qwebview发布线程

How do I get QWebView to release threads?

本文关键字:线程 布线程 何使 qwebview      更新时间:2023-10-16

我正在创建许多创建qthreads的qwebviews。问题在于我用尽了堆栈空间来创建更多线程。因此,我想知道是否有一种清理现有线程的方法。需要明确的是,我不是创建这些线程的人:QT在我显示Qwebview时会创建线程。

大多数线程(约400/500)具有完全相同的堆栈:

0 ntdll!rtlenablelylylysectionsectigeventCreation c: Windows  system32  ntdll.dll 0 0x770b013d1 kernel32!getVolumePathNamesforvolumenamea c: Windows  syswow64  kernel32.dll 0 0x766d1a2c2用户32!MessageBoxa C: Windows  syswow64  user32.dll 0 0x74CD086A3 QEVENTDISPATCHERWIN32 :: processEvents qeventdispatcher_win.cpp 831 0x69de39484 Qeventloop :: ProcessEvents Qeventloop.cpp 149 0x69dbf0c55 QEVENTLOOP :: EXEC QEVENTLOOP.CPP 204 0x69DBF2236 Qthread :: exec qthread.cpp 501 0x69cd412b7 QTHREAD :: RUN QTHREAD.CPP 568 0x69CD42838 Qthreadprivate :: start qthread_win.cpp 346 0x69cd54d19 msvcrt!_itow_s c: Windows  syswow64  msvcrt.dll 0 0x7540128710 msvcrt!_endthreadex C: Windows  syswow64  msvcrt.dll 0 0x7540132811 kernel32!basecleanupappcompatcachesupport c: windows  syswow64  kernel32.dll 0 0x766d339a12 ntdll!rtlpntsetValueKey C: Windows  System32  ntdll.dll 0 0x770C9EF2213 ntdll!rtlpntsetValueKey C: Windows  System32  ntdll.dll 0 0x770C9EC514 ??0

有什么方法可以清理它们?

由于我意识到该线程是为NetworkManager分配的,因此我创建了一个全局网络管理器实例,并将其设置为每个qwebview的NetworkAccessManager。这使其可以重复使用所有页面的同一组线程,因此不会留下许多线程。