使用 MFC 实现队列的正确方法

Proper way to implement Queue with MFC?

本文关键字:方法 队列 MFC 实现 使用      更新时间:2023-10-16

我想做的是;在多线程环境中的文本文件中存储一些字符串值。然后,我将每个字符串值存储在队列中,然后逐步读取该队列并将该值写入文本文件。

我在MSDN中看到了一些关于队列的例子。从该示例中,我进行了一些更改并创建了此代码段来存储CString值。但是我无法从这段代码中实现它。

class CQueue :public CTypedPtrList < CObList, CString* >
{
public:
    void AddToEnd(CString* newLog) {
        AddTail(newLog);
    }
    CString* GetFromFront() {
        return IsEmpty() ? NULL : RemoveHead();
    }
};

然后我试着这样打电话:

CQueue q;
CString str("data1");
q.AddToEnd(&str);

它给出了这个错误:

'void CObList::AddTail(CObList *)' : cannot convert argument 1 from 'ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>> ' to 'CObject *'

在 MFC 中实现队列的最佳方法是什么?

> CString 不是对象或更好:它不是从 CObject 派生出来的。但是你说这个名单应该来自CObList。你必须改用CPtrList。

class CQueue :public CTypedPtrList < CPtrList, CString* >

请注意:但即使比你的代码也非常危险。在示例中,您将创建一个指向堆栈上存在的变量的指针。如果函数存在,指针将失效...