Spinning pinwheel
The spinning wait cursor is a cursor in Apple's Mac OS X that indicates an application is not responding to system events. It is similar to the hourglass cursor in Microsoft Windows.
The Apple Human Interface Guidelines officially refer to it as the "spinning wait cursor"; its colloquial names include "hypnowheel"[1], "spinning starlight mint of doom", "pride swirl", "spinning pizza"[2], "spinning pinwheel", "pinwheel of death", "rainbow ball of doom", "The Wheel of Misfortune", "the beach ball of hell"[3], "spinning beach ball of death",[4] "Spinning beach ball of impending doom", "spinning wheel of death", "colorful wheel of thought", "rainbow wheel of death",[5] and "marble of doom"[6]. The suffix "of death" in these names is a reference to Microsoft Windows' Blue Screen of Death (BSOD), which also leads to the acronym "SPOD" for "spinning pizza of death," commonly used in mailing lists such as Mac-L.[7] The suffix 'of doom' is also commonly used.
History
A wrist-watch was the first "wait" cursor in early versions of Mac OS. Apple's HyperCard first popularized animated cursors, including a spinning beach ball which could be advanced by repeated HyperTalk invocations of "set cursor to busy". The beach ball cursor was also adopted to indicate running script code in the HyperTalk-like AppleScript.
These cursors would be activated by an application when it was performing a lengthy operation. (Microsoft Windows would later adopt Apple's Lisa hourglass cursor for the same concept.) Some versions of the Apple Installer used an animated "counting hand" cursor; other applications provided their own theme-appropriate custom cursors, such as Fetch's running dog and Retrospect's spinning tape. Apple provided standard interfaces for animating cursors: originally the Cursor Utilities (SpinCursor, RotateCursor) [8] and, in Mac OS 8 and later, the Appearance Manager (SetAnimatedThemeCursor). [9]
In Mac OS X, Apple gave the wheel rainbow colors and a more dynamic appearance. More significantly, Apple changed its meaning. Rather than being an indication that an application was performing an action it expected to take a while, it meant that the system software had noticed that an application had stopped responding to events. This could indicate that the application was in an infinite loop, or just performing a lengthy operation and ignoring events.
Like many other Mac OS 9 to Mac OS X changes, this new wait cursor originated with NEXTSTEP which eventually became the basis for Mac OS X.
Detailed explanation
Each application has an event queue which receives events from the operating system (for example key presses and mouse button clicks). If an application takes too long to process the events in its event queue (regardless of the exact cause) the operating system displays the wait cursor whenever the cursor hovers over that application's windows. This threshold is 5 seconds in Mac OS X v10.4, but was previously 2 seconds.
This is meant to indicate that the application is temporarily unresponsive, a state from which the application may recover, however it may also indicate that the application has entered an unrecoverable state. Users can choose to terminate an unresponsive application, by using "Force Quit" under the Apple menu, the keystroke command-option-escape, or the Force Quit command found by option-clicking the icon of an unresponsive application icon in the Dock.
While one application is unresponsive, typically other applications are usable in the meantime and may be used until the former becomes responsive again.
Guidelines, tools and methods for developers
Apple's guidelines suggest that developers try to avoid the spinning wait cursor, and suggest other user interface indicators, such as an asynchronous progress indicator.
Possible causes include:
- By default, events (and any actions they initiate) are processed sequentially. This design works well when each event leads to only a trivial amount of processing, which causes the application to appear responsive. However, if the processing takes a longer amount of time, the spinning wait cursor will appear until the operation is complete. Developers may prevent this happening by performing processing on a separate thread, allowing the application's main thread to continue responding to events. However, this greatly increases the application complexity.
- Bugs in applications can cause them to stop responding to events; for instance, an infinite loop. Applications that do this rarely recover.
- Problems with the virtual memory system such as slow paging caused by a spun-down hard disk (or, potentially, read errors) will cause the wait cursor to appear. In this case, multiple applications will display the wait cursor as they attempt to access memory that must be paged in until the hard disk and virtual memory system recover.
Spin Control is an application that comes with the Mac OS X Developer Tools. It allows the user to monitor and sample applications that are either not responding or performing a lengthy operation. Each time an application does not respond and the spinning wait cursor is activated, Spin Control will sample the application to determine which code is causing the application to stop responding. With this information, the developer can rewrite code to avoid the cursor being activated.
References
- ^ Hypnowheel
- ^ Spinning Pizza of Death
- ^ Mini-Tutorial: The dreaded spinning pinwheel
- ^ http://www.caminobrowser.org/releases/09a1.php
- ^ http://www.centennial.k12.or.us/schools/clc/clc_web/documents/AV/laptoptrouble.pdf
- ^ About the Marble of Doom
- ^ Mac-L Discussion List
- ^ http://developer.apple.com/DOCUMENTATION/mac/QuickDraw/QuickDraw-371.html
- ^ http://developer.apple.com/documentation/macos8/HumanInterfaceToolbox/AppManager/ProgWithAppearanceMgr/Appearance.3e.html
External links
- Apple Human Interface Guidelines: Standard Cursors from Apple's website.
- Perceived Responsiveness: Avoid the Spinning Cursor from Apple's website.
- Troubleshooting the "Spinning Beach Ball of Death" Excerpt from “Troubleshooting Mac OS X” book where there are some information on how to deal with Spinning Wait Cursor problems.