I avoid ad_progress_bar_* since it (used to, at least) die on Safari when the connection timed out - sending half the page, waiting, waiting, waiting, then the end...
for long-running tasks I spawn a detached thread for the task which updates status information in an nsv array, and direct the browser to a page which refreshes every 5 seconds and lets the user know how far through the process they are by reading from the nsv...
see http://slofith.org/fith/misc/openacs-progress.tar.bz2