ZBLOG

class CEdoyunQueue {//线程安全的队列(利用IOCP实现) public: enum { EQNone, EQPush, EQPop, EQSize, EQClear, }; typedef struct IocpParam { size_t nOperator;//操作 T strData;//数据 HAND...

在你的代码中,PushBack 函数的定义是在类 CEdoyunQueue 内部,但你没有给出完整的类定义,包括模板参数 <T>。请确保 CEdoyunQueue 是一个模板类,并且在类定义之前声明了它。

这里是一个可能的修正示例:

#include <windows.h>
#include <process.h>

template<typename T>
class CEdoyunQueue
{//线程安全的队列(利用IOCP实现)
public:
    enum {
        EQNone,
        EQPush,
        EQPop,
        EQSize,
        EQClear,
    };

    typedef struct IocpParam
    {
        size_t nOperator; //操作
        T strData; //数据
        HANDLE hEvent; //pop操作需要的
        
        IocpParam(int op, const T& data, HANDLE hEve = NULL)
            : nOperator(op), strData(data), hEvent(hEve) {}

        IocpParam() : nOperator(EQNone) {}
    } PPARAM; //Post Parameter 用于投递信息的结构体

private:
    bool m_lock;
    HANDLE m_hCompletionPort;
    HANDLE m_hThread;

public:
    CEdoyunQueue()
      : m_lock(false), m_hCompletionPort(CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, NULL, 1)), 
        m_hThread(INVALID_HANDLE_VALUE)
    {
        if (m_hCompletionPort != NULL)
        {
            m_hThread = (HANDLE)_beginthread(&CEdoyunQueue<T>::threadEntry, 0, this); // Pass 'this' as the argument
        }
    }

	~CEdoyunQueue()
	{
	    if (m_lock) return;
	    m_lock = true;
	    HANDLE hTemp = m_hCompletionPort;
	    PostQueuedCompletionStatus(m_hCompletionPort, 0, NULL, NULL);
	    WaitForSingleObject(m_hThread, INFINITE);
	    CloseHandle(hTemp);
	}

    bool PushBack(const T& data)
    {
        if (m_lock) return false;
        
        IocpParam* pParam = new IocpParam(EQPush, data);
        
        bool ret = PostQueuedCompletionStatus(m_hCompletionPort, sizeof(PPARAM),
            (ULONG_PTR)pParam, NULL);
        
        if (!ret) delete pParam;
        
        return ret;
    }

private:
    static void threadEntry(void* param)
    {
       // Your thread processing code here
       // Don't forget to cast 'param' back to 'CEdoyunQueue<T>*'
       CEdoyunQueue<T>* queue = static_cast<CEdoyunQueue<T>*>(param);
       
       // ... Handle IOCP operations ...
   }
};

注意事项:

  1. 模板类型:确认你的 CEdoyunQueue 是一个模板类,需要包含 template<typename T> 的定义。
  2. 正确使用 this 指针:在创建线程时传递 this,以便在线程函数中能够访问到类实例的数据。
  3. 内存管理:注意动态分配内存后一定要适当释放,避免内存泄漏。
  4. 错误处理:根据实际需求添加必要的错误处理逻辑。

根据这些修改,你应该不会再遇到 “没有成员 PushBack” 的错误。如果还有其他编译或运行时问题,请提供详细的信息,以便进一步帮助解决。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22209

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?