remove mention of wxMutexGuiEnter/leave from the multithreading topic overview; document that wxMutexGuiEnter only works for wxMSW as the code seems to confirm this (see #10366)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58683 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -6,6 +6,11 @@
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
NOTE: we explicitely don't name wxMutexGUIEnter() and wxMutexGUILeave()
|
||||
as they're not safe. See also ticket #10366.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@page overview_thread Multithreading
|
||||
@@ -20,27 +25,29 @@ wxWidgets resembles to POSIX1.c threads API (a.k.a. pthreads), although several
|
||||
functions have different names and some features inspired by Win32 thread API
|
||||
are there as well.
|
||||
|
||||
These classes will hopefully make writing MT programs easier and they also
|
||||
provide some extra error checking (compared to the native (be it Win32 or
|
||||
Posix) thread API), however it is still a non-trivial undertaking especially
|
||||
for large projects. Before starting an MT application (or starting to add MT
|
||||
These classes hopefully make writing MT programs easier and they also
|
||||
provide some extra error checking (compared to the native - be it Win32 or
|
||||
Posix - thread API), however it is still a non-trivial undertaking especially
|
||||
for large projects.
|
||||
Before starting an MT application (or starting to add MT
|
||||
features to an existing one) it is worth asking oneself if there is no easier
|
||||
and safer way to implement the same functionality. Of course, in some
|
||||
situations threads really make sense (classical example is a server application
|
||||
which launches a new thread for each new client), but in others it might be an
|
||||
overkill. On the other hand, the recent evolution of the computer hardware shows
|
||||
and safer way to implement the same functionality.
|
||||
Of course, in some situations threads really make sense (classical example is a
|
||||
server application which launches a new thread for each new client), but in others
|
||||
it might be an overkill.
|
||||
On the other hand, the recent evolution of the computer hardware shows
|
||||
an important trend towards multi-core systems, which are better exploited using
|
||||
multiple threads (e.g. you may want to split a long task among as many threads
|
||||
as many CPU (cores) the system reports; see wxThread::GetCPUCount).
|
||||
|
||||
To implement non-blocking operations without using multiple threads you have
|
||||
two other possible implementation choices:
|
||||
- using wxIdleEvent (e.g. to perform a long calculation while updating a progress dialog)
|
||||
- simply do everything at once but call wxWindow::Update() periodically to update the screen.
|
||||
To implement non-blocking operations @e without using multiple threads you have
|
||||
two possible implementation choices:
|
||||
- use wxIdleEvent (e.g. to perform a long calculation while updating a progress dialog)
|
||||
- do everything at once but call wxWindow::Update() or wxApp::YieldFor(wxEVT_CATEGORY_UI)
|
||||
periodically to update the screen.
|
||||
|
||||
Even if there are the ::wxMutexGuiEnter and ::wxMutexGuiLeave functions which allows
|
||||
to use GUI functions from multiple threads, if you do decide to use threads in your
|
||||
application, it is strongly recommended that <b>no more than one calls GUI functions</b>.
|
||||
If instead you choose to use threads in your application, it is strongly recommended
|
||||
that <b>no secondary threads call GUI functions</b>.
|
||||
The design which uses one GUI thread and several worker threads which communicate
|
||||
with the main one using @b events is much more robust and will undoubtedly save you
|
||||
countless problems (example: under Win32 a thread can only access GDI objects such
|
||||
|
Reference in New Issue
Block a user