wxThread 文档示例有用还是不好的编码实践?
wxThread documentation example usefull or bad coding practice?
我有一个使用线程的 C++ wxWidgets 程序。因此我需要确保安全地访问线程。在 wxThread documentation it is explained how to do so. They use friend
classes and wxCriticalSection
to secure their threads. I did it like in the example and it works fine, though when I talked to a collegue about it, he told me friend classes are evil and should be avoided alltogether to avoid unexpected behaviour. I should use wxMutex
而不是。
现在我明白他的意思了,因为有我的 main
作为朋友 class 可以让线程 class 完全访问它。我知道,这可能会导致问题,例如,如果我有类似命名的变量或无意中访问了我不应该在 main 之外使用的其他内容。但是我想知道这种方法是否有任何优点。我的意思是,必须有一些东西,否则我无法理解为什么 wxWidgets 文档中应该(作为唯一的方式)描述这种方式?
谁能告诉我这两种方法的优缺点?或者有没有第三种方法我可以只从主访问 wxCriticalSection
而无需使用 friend
或使其成为 public?感谢您的帮助。
编辑:当我意识到我代码中的关键部分是很久以前的人工制品时,不再需要了,这个问题对我的编程来说并不重要。尽管如此,我认为这是一个有趣的话题,对未来的情况会有用。
本题有2个完全正交的东西:
- 使用
friend
确实是个坏主意,wxThread
文档中的示例可以(并且应该)重写以避免它。最简单的方法是在 wxEVT_COMMAND_MYTHREAD_COMPLETED
事件处理程序中重置线程指针。
wxCriticalSection
在语义上与 wxMutex
完全相同,事实上,在非 Windows 平台下它们完全相同。在 Windows 下,wxCriticalSection
只是一种更有效的互斥锁(两者 类 都直接对应于它们在 Win32 中的对应物 API)。如果您使用 wxCS
而不是 wxMutex
只是为了保护一些共享数据,那么使用 wxCS
是完全可以的,而且实际上更可取。但是,您需要将 wxMutex
与 wxCondition
一起使用。
我有一个使用线程的 C++ wxWidgets 程序。因此我需要确保安全地访问线程。在 wxThread documentation it is explained how to do so. They use friend
classes and wxCriticalSection
to secure their threads. I did it like in the example and it works fine, though when I talked to a collegue about it, he told me friend classes are evil and should be avoided alltogether to avoid unexpected behaviour. I should use wxMutex
而不是。
现在我明白他的意思了,因为有我的 main
作为朋友 class 可以让线程 class 完全访问它。我知道,这可能会导致问题,例如,如果我有类似命名的变量或无意中访问了我不应该在 main 之外使用的其他内容。但是我想知道这种方法是否有任何优点。我的意思是,必须有一些东西,否则我无法理解为什么 wxWidgets 文档中应该(作为唯一的方式)描述这种方式?
谁能告诉我这两种方法的优缺点?或者有没有第三种方法我可以只从主访问 wxCriticalSection
而无需使用 friend
或使其成为 public?感谢您的帮助。
编辑:当我意识到我代码中的关键部分是很久以前的人工制品时,不再需要了,这个问题对我的编程来说并不重要。尽管如此,我认为这是一个有趣的话题,对未来的情况会有用。
本题有2个完全正交的东西:
- 使用
friend
确实是个坏主意,wxThread
文档中的示例可以(并且应该)重写以避免它。最简单的方法是在wxEVT_COMMAND_MYTHREAD_COMPLETED
事件处理程序中重置线程指针。 wxCriticalSection
在语义上与wxMutex
完全相同,事实上,在非 Windows 平台下它们完全相同。在 Windows 下,wxCriticalSection
只是一种更有效的互斥锁(两者 类 都直接对应于它们在 Win32 中的对应物 API)。如果您使用wxCS
而不是wxMutex
只是为了保护一些共享数据,那么使用wxCS
是完全可以的,而且实际上更可取。但是,您需要将wxMutex
与wxCondition
一起使用。