如何在单独的线程中创建多个任务?
How to create multi tasks each one in a separate thread?
我有两个静态方法:
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()
方法 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
示例。
我有两个静态方法:
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()
方法 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
示例。