【问题标题】:How to increase stack size for a thread in Qt - QThread::setStackSize() seems not to work?如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?
【发布时间】: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_threadQThread 实例,stackSize 是 32000000)。

我已经单独尝试了以上两种尝试,并且我已经尝试了它们。结果是相同的:所讨论线程的堆栈大小保持在 1 MB。它没有反映我想要的堆栈大小。我无法为我的 Qt 线程设置堆栈大小。

我如何实际上将 Qt 线程的堆栈大小设置为 32000000 - 并且以一种适用于 Windows 和 OS X 的方式?

谢谢。

【问题讨论】:

  • 证明上述 QMAKE 标志有效。但是,使用 Qt Creator,执行 Clean All 并重新构建无法获取新标志。相反,必须删除整个 Debug/Release 文件夹,然后然后执行重建。然后就可以了。
  • 您可以将其发布为您自己的答案并接受它
  • @PeterT - 同意,只是需要一点刺激。 :)

标签: c++ windows multithreading qt stack


【解决方案1】:

结果是问题工作中指示的 QMAKE 标志。

但是,使用 Qt Creator,执行 Clean All 和重建并不能拾取新标志。相反,必须删除整个 Debug/Release 文件夹,然后执行重建。然后就可以了。

但这些标志仅适用于 Windows - 当我确定 OS X 标志时,我可能会更新此答案,希望很快。

尽管如此,这些标志仍按指示工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2011-05-17
    • 2015-11-22
    • 2013-12-24
    • 2011-09-29
    • 2011-01-05
    相关资源
    最近更新 更多