Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;POCO磨合线程问题_C++_Multithreading_Poco_Runnable - Fatal编程技术网

C++ C++;POCO磨合线程问题

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\

我在编译时遇到了一个问题

我收到错误:

在成员函数中 '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类:

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);