C++ C++;POCO磨合线程问题
我在编译时遇到了一个问题 我收到错误: 在成员函数中 'void CSConnection::onReadable(const Poco::AutoPtr&)':| CSConnection.cpp | 92 |错误:否 用于调用的匹配函数 'Poco::ThreadPool::start(QuitHandler*)'| CSConnection.cpp | 92 |注:候选人 它们是:| c:\mingw\bin..\lib\gcc\mingw32\4.7.2……。\include\Poco\ThreadPool.h | 122 |注: void Poco::ThreadPool::start(Poco::Runnable&)| c:\mingw\bin..\lib\gcc\mingw32\4.7.2……。\include\Poco\ThreadPool.h | 122 |注: 参数1没有从'QuitHandler*'到的已知转换 'Poco::可运行&'| c:\mingw\bin..\lib\gcc\mingw32\4.7.2……。\include\Poco\ThreadPool.h | 127 |注: void Poco::ThreadPool::start(Poco::Runnable&,const string&)| c:\mingw\bin..\lib\gcc\mingw32\4.7.2……。\include\Poco\ThreadPool.h | 127 |注: 候选者需要2个参数,1个提供| | |===构建完成:1 错误,0个警告(0分1秒)===| 下面是quithandler类:C++ C++;POCO磨合线程问题,c++,multithreading,poco,runnable,C++,Multithreading,Poco,Runnable,我在编译时遇到了一个问题 我收到错误: 在成员函数中 'void CSConnection::onReadable(const Poco::AutoPtr&)':| CSConnection.cpp | 92 |错误:否 用于调用的匹配函数 'Poco::ThreadPool::start(QuitHandler*)'| CSConnection.cpp | 92 |注:候选人 它们是:| c:\mingw\bin..\lib\gcc\mingw32\4.7.2……。\include\Poco\
class QuitHandler : public Runnable
{
public:
QuitHandler(){}
CSConnection * _con;
void run();
virtual ~QuitHandler();
protected:
private:
char * _packet;
};
这里是错误线
QuitHandler * qh;
qh = new QuitHandler();
WorkerThreadPool::getInstance().tp->start(qh);
谢谢 start方法接受引用,而不是指针: 快速解决办法是:
QuitHandler qh;
WorkerThreadPool::getInstance().tp->start(qh);
或
现在我得到了这个错误:CSConnection.cpp | 90 |错误:交叉初始化'QuitHandler qh';请发布演示此错误的最小示例。或者阅读一些关于“交叉初始化”含义的解释,您可能会自己发现:.{}in switch修复了它,但应用程序在线程启动时崩溃,所以不会调用run函数。您必须重新设计“qh”的代码,以免在线程运行时被破坏。我已经编辑了答案,并提出了另一个快速解决方案。不,这就是我所说的。这就是问题所在——“qh”不能在需要时销毁。它需要在您正在创建的线程中执行。您必须以某种方式安排在线程完成后删除“qh”的所有内容。
QuitHandler* qh = new QuitHandler();
WorkerThreadPool::getInstance().tp->start(*qh);