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

Posted

技术标签:

【中文标题】使用 MFC 实现队列的正确方法?【英文标题】:Proper way to implement Queue with MFC? 【发布时间】:2016-07-12 12:07:17 【问题描述】:

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

我在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 中实现队列的最佳方式是什么?

【问题讨论】:

【参考方案1】:

CString 不是对象或更好:它不是从 CObject 派生的。但是你说列表应该来自CObList。您必须改用 CPtrList。

class CQueue :public CTypedPtrList < CPtrList, CString* >

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

【讨论】:

现在我在获取 CString* 类型整数时遇到了另一个问题。例如,如果我们存储 124;它只会打印另外 1 个缺少 2,4 个数字。 ? 这是一个新问题...可能你只是输出一个字符, 是的,这是一个新问题。我用**(指针的指针)来获取值 你应该打开一个新的。使用 ** 将始终只返回第一个字符。请学习 C++ 基础知识。

以上是关于使用 MFC 实现队列的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

停止线程池的正确方法

正确使用 Alamofire 队列

在 MFC 项目中使用资源文件的正确方法是啥?

MFC自定义消息的实现方法

mfc窗口置于指定窗口上(前)方怎么实现?

MFC按钮控件实现指示灯效果