我一直在寻找 Qt 线程的简洁示例,我发现的只是复杂的“养眼的东西”,声称可以展示 QThread 的工作原理,但它们实在太多了,难以理解。
我接受了 Zen 的答案,因为他向我展示了我的尝试所缺少的确切内容,然后添加了我自己的答案作为我想看到的示例。单击此处跳至:/sf/answers/2419278571/
我原来的问题如下:
看来我一定错过了一些东西,但我似乎无法让这项工作像我认为的那样进行。我的完整应用程序需要有两个或三个线程,所有这些线程(几乎)一起启动并永远运行:
当然,核心功能是在实时处理线程中,其他两个只是调整其工作方式。因此,在实时处理器运行时,根据用户在 GUI 中的操作,会创建、修改和销毁处理对象,并且其中一些对象内的数据也由 USB 生成和消耗。
我一直在寻找如何在 Qt 中使用线程的示例,但我不断得到复杂的“养眼”类型的应用程序,这些应用程序使线程部分变得混乱。我尽力尝试解释它们并编写自己的代码,但我不断在 Qt 本身中遇到段错误,而且我的小型“游乐场”项目说我什至没有获得第二个线程:
#ifndef MAIN_H
#define MAIN_H
#include <QtWidgets>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent = 0);
~MainWindow() {}
private:
QObject* mythingy;
private slots:
void deleteObject(QObject* thingy);
};
class Worker : public QObject
{
Q_OBJECT
public:
Worker(QObject* thingy, QObject* parent = 0);
private:
QObject* …
Run Code Online (Sandbox Code Playgroud) 与此问题类似,但足够不同,我不认为它是重复的:
C++在初始化列表中的基类初始化之前调用函数
我有这个构造函数:
EditorGrid::EditorGrid(int width, int height) :
Grid(width , //workingWidth
height , //workingHeight
(SettingsApp::getInstance(0)->iconSize + SettingsApp::getInstance(0)->iconSpace ) , //pitchWidth
(SettingsApp::getInstance(0)->iconSize + SettingsApp::getInstance(0)->iconSpace + SettingsApp::getInstance(0)->iconLabel) //pitchHeight
)
{
//EditorGrid-specific setup
}
Run Code Online (Sandbox Code Playgroud)
它有效,但是SettingsApp::getInstance(0)
当我知道它每次都会返回相同的东西时,我会多次打电话看起来很难看.我可以调用一次,只是在这种情况下重用该值吗?
(在这种情况下,指向SettingsApp
对象的指针)
(它的结构是这样的原因是因为不同的孩子Grid
有不同的方程pitchWidth
和pitchHeight
,我想保持隐含使用相同的对象处处不实际传递的单身主意.)
我正在开发一个相当复杂的多线程应用程序,该应用程序不属于任何人。在许多正确的 MessageBox 中,至少有一个需要不同的消息。我可以通过 UI 轻松访问它,但我不知道它在代码中的位置。如果我在此时暂停调试器,它将转到 Application.Run(...) 方法调用,并且调用堆栈为空。
我如何知道 MessageBox 在哪里?
我可以在关闭 MessageBox 后立即中断它并将我带到执行此操作的代码吗?
或者也许暂停所有线程,让我看看哪个线程接近看起来正确的 MessageBox.Show(...) ?
我用的是VS2008。
这段代码有很多具有不同模式的消息框。有些使用 MessageBox.Show(...),而其他则使用owner.Invoke(new MessageBoxShowDelegate(MessageBox.Show),...)。极少数直接包含该消息;大多数要么传递异常消息,要么从数据库获取字符串。
我只是一长串在没有太多内部文档的情况下修改了此代码的人中的另一个人,因此我看不到整体结构。