⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tthreads.tex

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 TEX
字号:
\section{Multithreading overview}\label{wxthreadoverview}Classes: \helpref{wxThread}{wxthread}, \helpref{wxMutex}{wxmutex}, \helpref{wxCriticalSection}{wxcriticalsection}, \helpref{wxCondition}{wxcondition}wxWidgets provides a complete set of classes encapsulating objects necessary inmultithreaded (MT) programs: the \helpref{thread}{wxthread} class itself and differentsynchronization objects: \helpref{mutexes}{wxmutex} and \helpref{critical sections}{wxcriticalsection} with \helpref{conditions}{wxcondition}. The thread API in wxWidgets resembles toPOSIX1.c threads API (a.k.a. pthreads), although several functions havedifferent names and some features inspired by Win32 thread API are there aswell.These classes will hopefully make writing MT programs easier and they alsoprovide 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 largeprojects. Before starting an MT application (or starting to add MT features toan existing one) it is worth asking oneself if there is no easier and safer wayto implement the same functionality. Of course, in some situations threadsreally make sense (classical example is a server application which launches anew thread for each new client), but in others it might be a very poor choice(example: launching a separate thread when doing a long computation to show aprogress dialog). Other implementation choices are available: for the progressdialog example it is far better to do the calculations in the \helpref{idle handler}{wxidleevent} or even simply do everything at oncebut call \helpref{wxWindow::Update()}{wxwindowupdate} periodically to updatethe screen.If you do decide to use threads in your application, it is strongly recommendedthat no more than one thread calls GUI functions. The thread sample shows thatit {\it is} possible for many different threads to call GUI functions at once(all the threads created in the sample access GUI), but it is a very poor designchoice for anything except an example. The design which uses one GUI thread andseveral worker threads which communicate with the main one using events is muchmore robust and will undoubtedly save you countless problems (example: underWin32 a thread can only access GDI objects such as pens, brushes, \&c created byitself and not by the other threads).For communication between secondary threads and the main thread, you may use \helpref{wxEvtHandler::AddPendingEvent}{wxevthandleraddpendingevent}or its short version \helpref{wxPostEvent}{wxpostevent}. These functionshave a thread-safe implementation so that they can be used as they are forsending events from one thread to another. However there is no built in methodto send messages to the worker threads and you will need to use the availablesynchronization classes to implement the solution which suits your needsyourself. In particular, please note that it is \emph{not} enough to deriveyour class from \helpref{wxThread}{wxthread} and \helpref{wxEvtHandler}{wxevthandler} to send messages to it: in fact, this does\emph{not} work at all.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -