C++ 如何在一个单独的线程中创建多个任务?
我有两种静态方法: bool getPictureconst std::string url,const std::string关键字= bool showPicturewxStaticBitmap*查看器 这些方法每个都执行单独的任务,因此,我希望每个方法都在单独的线程中执行C++ 如何在一个单独的线程中创建多个任务?,c++,multithreading,wxwidgets,C++,Multithreading,Wxwidgets,我有两种静态方法: bool getPictureconst std::string url,const std::string关键字= bool showPicturewxStaticBitmap*查看器 这些方法每个都执行单独的任务,因此,我希望每个方法都在单独的线程中执行 #include <wx/thread.h> // Declaration class CThread : public wxThread { public: CThread() = defaul
#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类的所有实例都是共享其方法的类。因此,如果需要不同的条目,则需要一个新的wxThread派生类
关于多线程的建议:
虽然getPicture可以在辅助线程中执行,但showPicture应该在主线程中执行,因为它是绘制窗口的正确位置。强烈建议只在主线程中完成所有GUI工作。
很少有人期望在辅助线程中使用OpenGL,而不是通过操作系统命令进行绘图
关键是,次线程向主线程发布一条消息,告诉我完成了,映像可用。
处理后的新数据图像可以放置在主线程(例如,将绘制它的窗口)可以读取它的位置。
使用wxCriticalSectionLocker,防止getPicture的工作线程在写入时任何其他线程访问数据
更多信息,请访问wxWidgets发行版提供的threadsample。可能有助于解决您的问题。问题是,次线程向主线程发布消息,告知我完成了,图像可用。我如何知道线程已经完成任务并准备就绪?@LionKing在次线程中,getPicture结束后,在退出EntryAbout之前发布消息,虽然getPicture可以在次线程中执行,但showPicture应该在主线程中执行,因为它是绘制窗口的正确位置。将showPicture放在主窗口中,并将getPicture放在线程中时,结果是showPicture不显示当前图像,而是显示previos图像该窗口必须具有一个成员函数来处理从次线程接收到的消息。使用在此函数中,您将调用showPictureUse绑定。将使用什么类型的事件?