wxthread文档示例有用或不良的编码实践

wxThread documentation example usefull or bad coding practice?

本文关键字:编码 不良 文档 有用 wxthread      更新时间:2023-10-16

我有一个使用线程的C WXWidgets程序。因此,我需要确保安全访问线程。在WXThread文档中,可以解释如何做到这一点。他们使用friend类和wxCriticalSection来保护其线程。我在示例中做得很好,效果很好,尽管当我与同事谈论这件事时,他告诉我,朋友课是邪恶的,应该避免完全行为以避免出乎意料的行为。我应该使用wxMutex

现在我明白了他的观点,因为让我的main作为朋友类使线程类完全访问它。我知道,这可能会导致问题,例如,如果我同样命名的变量或不明确地访问其他我不应该在Main之外使用的东西。但是我想知道这种方法是否有任何优势。我的意思是,必须有一些东西,否则我不明白为什么在WXWIDGETS文档中所描述的(作为唯一的方式)应该这样做?

有人可以让我了解这两种方法的优势和缺点吗?还是我只有第三种方法可以在不使用friend或公开的情况下仅从MAIN访问wxCriticalSection?谢谢您的帮助。


edit :我意识到我的代码中的关键部分是很久以前的工件,这不再是必要的,所以问题对于我的编程并不重要。尽管如此,我认为这是一个有趣的话题,对于将来的情况很有用。

在这个问题中有2个完全正交的东西:

  1. 使用friend确实是一个坏主意,wxThread文档中的示例可以(并且应该)重写以避免它。最简单的方法是重置wxEVT_COMMAND_MYTHREAD_COMPLETED事件处理程序中的线程指针。
  2. wxCriticalSection在语义上与wxMutex完全相同,实际上,在非窗口平台下它们完全相同。在Windows下,wxCriticalSection只是一种更有效的静音(这两个类直接对应于Win32 API中的对应物)。如果您全部用于保护某些共享数据,则完全可以使用wxCS而不是wxMutex。您需要将wxMutexwxCondition一起使用。