如何在单独的线程中创建多个任务?

How to create multi tasks each one in a separate thread?

我有两个静态方法:

这些方法每个都执行一个单独的任务,所以,我希望每个方法都在一个单独的线程中执行。

#include <wx/thread.h>

// Declaration

class CThread : public wxThread {
public:
    CThread() = default;
    ~CThread() = default;
    void *Entry();
};

// Implementation

void* CThread::Entry() {
    CPublic::getPicture(mainFrm::getInstance()->targetURL, CPublic::getConfigItem("settings/keywords").ToStdString());
    // CPublic::showPicture(mainFrm::getInstance()->viewer_btmp);
    return 0;
}

// Create an instance

wxThread *th = new CThread();
th->Create();
th->Run();

正如你在前面的代码中看到的,每个线程中都有一个 Entry() 方法 class,所以,我想要另一个 Entry() 方法来放置我的下一个方法 showPicture() 进去。

我是否必须创建另一个 class,它有另一个 Entry() 方法来放置我的 showPicture() 方法放入其中,要在另一个单独的线程中执行还是有其他方法?

快速回答:
一个class的所有实例(wxThread是一个class)共享它的方法。所以如果你想要一个不同的 Entry(),你需要一个新的 wxThread-derived class.

关于多线程的建议:
虽然 getPicture() 可以在辅助线程中执行,但 showPicture() 应该在主线程中执行,因为它是绘制到 window 的正确位置。强烈建议 在主线程中完成所有 GUI 内容。
一个罕见的期望是在辅助线程中使用 OpenGL 而不是通过 OS 命令绘图。

重点是副线程发消息给主线程告诉"I'm done, image is available"。
新数据(处理过的图像)可以放在主线程(例如要绘制它的window)可以读取的位置。
通过使用 wxCriticalSectionLocker.

防止任何其他线程在工作线程(getPicture() 的工作线程)正在写入时访问数据

有关 wxWidgets docs, more wxWidgets doc 的更多信息和随 wxWidgets 分发提供的 thread 示例。