如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?
Posted
技术标签:
【中文标题】如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?【英文标题】:How to increase stack size for a thread in Qt - QThread::setStackSize() seems not to work? 【发布时间】:2014-04-30 08:58:00 【问题描述】:来自问题:SQLite stack overflow when running a bulk INSERT OR REPLACE with 500 rows: why?,我需要增加 Qt 中某个线程的堆栈大小。
我希望这是跨平台的,但我最初是尝试让它在 Windows 上运行。
不幸的是,我没有尝试成功增加相关线程的堆栈大小。 (我通过添加代码来评估当前堆栈大小(参见上面的链接)来测量堆栈大小,并观察在 1 MB 时发生堆栈溢出崩溃,这并不反映我正在尝试设置的堆栈大小。)
我尝试了以下方法:
在项目的 Qt 的 .pro
文件中:
QMAKE_CXXFLAGS += /F 32000000
QMAKE_LFLAGS += /STACK:32000000
源码中,QThread::start()
函数之前的那行在线程上被调用:
work_queue_manager_thread.setStackSize(static_cast<uint>(stackSize));
(其中work_queue_manager_thread
是QThread
实例,stackSize
是 32000000)。
我已经单独尝试了以上两种尝试,并且我已经尝试了它们。结果是相同的:所讨论线程的堆栈大小保持在 1 MB。它没有反映我想要的堆栈大小。我无法为我的 Qt 线程设置堆栈大小。
我如何实际上将 Qt 线程的堆栈大小设置为 32000000 - 并且以一种适用于 Windows 和 OS X 的方式?
谢谢。
【问题讨论】:
证明上述 QMAKE 标志有效。但是,使用 Qt Creator,执行Clean All
并重新构建无法获取新标志。相反,必须删除整个 Debug/Release 文件夹,然后然后执行重建。然后就可以了。
您可以将其发布为您自己的答案并接受它
@PeterT - 同意,只是需要一点刺激。 :)
【参考方案1】:
结果是问题工作中指示的 QMAKE 标志。
但是,使用 Qt Creator,执行 Clean All 和重建并不能拾取新标志。相反,必须删除整个 Debug/Release 文件夹,然后执行重建。然后就可以了。
但这些标志仅适用于 Windows - 当我确定 OS X 标志时,我可能会更新此答案,希望很快。
尽管如此,这些标志仍按指示工作。
【讨论】:
以上是关于如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?的主要内容,如果未能解决你的问题,请参考以下文章