wxthread文档示例有用或不良的编码实践
wxThread documentation example usefull or bad coding practice?
我有一个使用线程的C WXWidgets程序。因此,我需要确保安全访问线程。在WXThread文档中,可以解释如何做到这一点。他们使用friend
类和wxCriticalSection
来保护其线程。我在示例中做得很好,效果很好,尽管当我与同事谈论这件事时,他告诉我,朋友课是邪恶的,应该避免完全行为以避免出乎意料的行为。我应该使用wxMutex
。
现在我明白了他的观点,因为让我的main
作为朋友类使线程类完全访问它。我知道,这可能会导致问题,例如,如果我同样命名的变量或不明确地访问其他我不应该在Main之外使用的东西。但是我想知道这种方法是否有任何优势。我的意思是,必须有一些东西,否则我不明白为什么在WXWIDGETS文档中所描述的(作为唯一的方式)应该这样做?
有人可以让我了解这两种方法的优势和缺点吗?还是我只有第三种方法可以在不使用friend
或公开的情况下仅从MAIN访问wxCriticalSection
?谢谢您的帮助。
edit :我意识到我的代码中的关键部分是很久以前的工件,这不再是必要的,所以问题对于我的编程并不重要。尽管如此,我认为这是一个有趣的话题,对于将来的情况很有用。
在这个问题中有2个完全正交的东西:
- 使用
friend
确实是一个坏主意,wxThread
文档中的示例可以(并且应该)重写以避免它。最简单的方法是重置wxEVT_COMMAND_MYTHREAD_COMPLETED
事件处理程序中的线程指针。 -
wxCriticalSection
在语义上与wxMutex
完全相同,实际上,在非窗口平台下它们完全相同。在Windows下,wxCriticalSection
只是一种更有效的静音(这两个类直接对应于Win32 API中的对应物)。如果您全部用于保护某些共享数据,则完全可以使用wxCS
而不是wxMutex
。您需要将wxMutex
与wxCondition
一起使用。
相关文章:
- 如何确定我已使用非编码文件到达 EOF?
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 在卡萨布兰卡形成编码参数的列表
- 使用C++进行游程编码
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 使用已使用 java 编码的 openssl 解码数据
- boost 是否有按特殊类型值编码状态"compact optional"?
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 如何使用 C++将 ISO-2022-KR 编码转换为 UTF-8 编码?
- 绝对编码器十六进制输入
- 防止C++中的硬编码数字
- 为什么"using System;"不被视为不良做法?
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 使用文件内容作为硬编码字符串
- 运行长度编码程序 c++ 的问题
- 以C++为单位进行运行长度编码
- *新的编码器*格式和运算符
- wxthread文档示例有用或不良的编码实践
- 不良的编码实践?条件中的预递增 &&
- 情况是statement1 + statement2:编码不良