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

标签 c++ multithreading wxwidgets

我有两个静态方法:

  • bool getPicture(const std::string url, const std::string keywords ="")
  • bool showPicture(wxStaticBitmap *viewer)

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

#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() 方法,所以,我想要另一个 Entry() 方法来放置我的将下一个方法 showPicture() 放入其中。

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

最佳答案

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

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

重点是辅助线程向主线程发送一条消息,告知“我完成了,图像可用”。
新数据(处理过的图像)可以放在主线程(例如要绘制它的窗口)可以读取的位置。
通过使用wxCriticalSectionLocker,防止任何其他线程在工作线程(getPicture())写入时访问数据。

更多信息请访问 wxWidgets docs , more wxWidgets doc随 wxWidgets 分发提供的 thread 示例。

关于c++ - 如何在单独的线程中创建多个任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255642/

相关文章:

multithreading - 在 QThreads 中执行双向信号

python - 如何向 wxGrid 单元格添加复选框?

C++串行连接

c++ - 通用消息调度库?

c++ - 在 objective-c 中使用 c++ 作为常量有什么缺点吗

c++ - C++中使用NEW和不使用NEW有什么区别

python - wxPython:将文件拖到窗口中以获取文件路径

C++ 尝试使用函数参数定义二维数组

linux - 如何thread_local!在 rust 中使用动态库?

objective-c - 如何独立运行两个任务