请协助判断 我的主线程是哪一个 并就讲解,我认为是inject那个线程,另外,如果将inject线程中的函数放入dllmian()中,主线程变更为什那一条线程?
另:请另给出一个qt多线程模板
或者mfc的多线程模板,下一步学习目标是多开程序,各自处理自己的任务。
C++/qt 线程问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
22条回答 默认 最新
关注 获得0.45元问题酬金 引自免费微信小程序:皆我百晓生
在您的代码片段中,主线程是创建
QCoreApplication a(arge, nullptr);
的线程。在Qt应用程序中,主线程通常是执行main()
函数的那个线程,其中初始化了QApplication
或QCoreApplication
实例并调用其exec()
方法以启动事件循环。对于您提到的
InjectD11(LPVOID IParam)
函数,当它在一个新创建的线程(如图2中的第50-51行)中运行时,那么这个线程就不是主线程。如果您将该函数的内容移动到DLLMain
的DLL_PROCESS_ATTACH
分支内,并且不创建额外的线程来执行它,那么这部分逻辑将在加载DLL时由进程的主线程执行。关于Qt多线程模板,请参考以下示例:
#include <QThread> #include <QDebug> // 工作类,继承自QObject并在工作线程中运行 class Worker : public QObject { Q_OBJECT public: Worker(QObject *parent = nullptr) : QObject(parent) {} public slots: void doWork() { for (int i = 0; i < 100; ++i) { qDebug() << "Worker thread: " << QThread::currentThreadId(); // 在这里执行耗时任务 QThread::sleep(1); } } }; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 创建工作线程 QThread workerThread; Worker worker; // 将worker对象移动到workerThread线程中 worker.moveToThread(&workerThread); // 连接线程开始信号到doWork槽 QObject::connect(&workerThread, &QThread::started, &worker, &Worker::doWork); // 连接线程完成信号到quit槽,以便在工作完成后退出线程 QObject::connect(&worker, &Worker::finished, &workerThread, &QThread::quit); // 启动工作线程 workerThread.start(); // 主线程继续执行,直到所有事件处理完毕 return app.exec(); }
对于MFC多线程模板,可以使用afxbeginthread或者CWinThread类实现,如下所示:
class CMyWorkerThread : public CWinThread { protected: virtual BOOL InitInstance() override { // 初始化线程数据和状态 return TRUE; } virtual int Run() override { // 在这里执行线程的任务 for (int i = 0; i < 100; ++i) { AfxMessageBox(_T("Working in MFC thread...")); // 模拟耗时任务 Sleep(1000); } return 0; } }; // 在主函数中创建并启动线程 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // ... CMyWorkerThread workerThread; if (workerThread.CreateThread() != 0) { workerThread.ResumeThread(); // 如果需要立即开始执行,则唤醒线程 } // 继续执行主窗口和其他程序逻辑... // ... }
请注意,在实际编程中,务必确保正确同步线程间的访问,并遵循线程安全原则。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
- ¥15 如何在arcgis中导出拓扑关系表
- ¥15 处理数据集文本挖掘代码
- ¥15 matlab2017
- ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
- ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
- ¥20 求:怎么实现qt与pcie通信
- ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
- ¥15 基于蒙特卡罗法的中介效应点估计代码
- ¥15 罗技G293和UE5.3