如何让QWebView发布线程?

时间:2014-02-07 02:56:40

标签: c++ multithreading qt

我正在创建许多QWebViews,每个都创建QThreads。问题是我的堆栈空间不足以创建更多线程。因此,我想知道是否有办法清理现有的线程。要清楚,我不是创建这些线程的人:Qt在我展示QWebView时创建线程。

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

0  ntdll!RtlEnableEarlyCriticalSectionEventCreation C:\Windows\system32\ntdll.dll  0   0x770b013d  
1   KERNEL32!GetVolumePathNamesForVolumeNameA       C:\Windows\syswow64\kernel32.dll    0   0x766d1a2c  
2   USER32!MessageBoxA                              C:\Windows\syswow64\user32.dll  0   0x74cd086a  
3   QEventDispatcherWin32::processEvents            qeventdispatcher_win.cpp    831 0x69de3948  
4   QEventLoop::processEvents                       qeventloop.cpp  149 0x69dbf0c5  
5   QEventLoop::exec                                qeventloop.cpp  204 0x69dbf223  
6   QThread::exec                                   qthread.cpp 501 0x69cd412b  
7   QThread::run                                    qthread.cpp 568 0x69cd4283  
8   QThreadPrivate::start                           qthread_win.cpp 346 0x69cd54d1  
9   msvcrt!_itow_s                                  C:\Windows\syswow64\msvcrt.dll  0   0x75401287  
10  msvcrt!_endthreadex                             C:\Windows\syswow64\msvcrt.dll  0   0x75401328  
11  KERNEL32!BaseCleanupAppcompatCacheSupport       C:\Windows\syswow64\kernel32.dll    0   0x766d339a  
12  ntdll!RtlpNtSetValueKey                         C:\Windows\system32\ntdll.dll   0   0x770c9ef2  
13  ntdll!RtlpNtSetValueKey                         C:\Windows\system32\ntdll.dll   0   0x770c9ec5  
14  ??      0       

有没有办法清理它们?

1 个答案:

答案 0 :(得分:0)

由于我意识到线程是为NetworkManager分配的,因此我创建了一个全局的NetworkManager实例并将其设置为每个QWebView的NetworkAccessManager。这允许它为所有页面重用相同的线程组,因此不会留下许多线程。