#ifndef _GdZeroMQ_H_ #define _GdZeroMQ_H_ #include #include #include using namespace std; #include "zmq.h" typedef void (*pCallBack_RecvData)(QByteArray szTopic,QByteArray szAddr,QByteArray szData, void* pOwner); class GdZeroMQ { public: GdZeroMQ(); ~GdZeroMQ(); bool Init(int nPort_Publisher, QVector nPorts_Subscriber, const char* lpszPublisherName, pCallBack_RecvData pCB_RecvData, void* pOwner); void SendData(char* lpszObjName, QByteArray szData); private: void Uninit(); void CreatePublisher(int nPort_Publisher); void CreateSubscriber(QVector nPorts_Subscriber); void AddTopic(const char* lpszTopicName); private: typedef void (GdZeroMQ::*ThreadRunFunPtr)(); static void ThreadEntry(ThreadRunFunPtr pRunFun, void* pOwner); void ThreadFun_RecvData(); bool StartThread(); void StopThread(); private: bool m_bInit; void* m_pContext; void* m_pPublisher; // 发布 void* m_pSubscriber; // 订阅 char* m_lpszSelfName; bool m_bThreadRunning_RecvData; std::thread* m_ptrThread_RecvData; pCallBack_RecvData m_pCallBack_RecvData; void* m_pOwner; }; #endif // _GdZeroMQ_H_