【发布时间】: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 - 同意,只是需要一点刺激。 :)
标签: c++ windows multithreading qt stack