We've done this in Krang (http://krang.sf.net) without forking a separate
process - it's used to show progress during preview/publish of story and
media objects. We did it as follows:
At the beginning of the run-mode, we immediately return a no-parse header,
along with the template that provides the frame for the output. That
template also contains the progress bar/thermometer, and the javascript
necessary to update it.
The runmode then calls the method that does the actual work, and passes in
a callback subroutine ref as a parameter. As the method does its work, it
periodically calls the callback, which outputs a single line, the
javascript call to update the browser.
The code is part of a pretty extensive module, I'd rather not summarize it
here and give you possibly broken code. But you can find it yourself -
look at preview_story() and publish_story() in Krang::CGI::Publisher
(KRANG_ROOT/lib/Krang/CGI/Publisher).
--pete
On Tue, 3 Aug 2004, Mark A. Fuller wrote:
> It was discussed in
>
> http://www.mail-archive.com/[EMAIL PROTECTED]/msg01851.html
>
> which has a link to a lengthy article with sample code. The lengthy article says
> the forked child would update a session cache and the parent would continuously
> check the cache to see if the child completed. Wouldn't it be more straightforward
> for the parent to perform a "waitpid"? When the child exits and the parent receives
> notice of this event (via waitpid), it could proceed to check the session cache for
> more detailed information about the final disposition of that process.
>
> Mark
>
>
> -----Original Message-----
> From: Michael Peters <[EMAIL PROTECTED]>
> Sent: Aug 3, 2004 6:47 AM
> To: cgiapp <[EMAIL PROTECTED]>
> Subject: Re: [cgiapp] how to do a progress bar or similar?
>
> Andreas Schuldei wrote:
> > hi!
> >
> > how can i implement some kind of progress indicator?
> >
> > in one part of my app it is hard to tell for the user on the
> > remote webbrowser that something is happening and everything goes
> > according to plan (during account mass-generation).
> >
> > how can i print out the processed usernames or just dots or some
> > other nice "we are getting there" indicator?
> >
> > I feel this is a bit against CGI::Applications basic way of
> > operation, since it usually outputs the *finished* page.
> >
> > How do i do this cleanly and well integrated into the framework?
> > anyone with some example code?
>
> Believe it or not, this is a question that is brought up many times
> here. Since I might not remember all of the good suggestions, you might
> want to search the archives.
>
> Briefly, it involves taking the data to be processed, forking off a
> child to actually do the processing (or having a cron job/daemon doing
> the processing). Then you return a 'please wait' screen to the user
> maybe with an animated gif progress bar. This please wait screen will
> continually refresh. When the work being done in the background is
> finished, you can have it set some sort of flag/file, etc telling the
> 'please wait' page that is refreshing that it's done, so the next time
> it refreshes it shows the user what they want.
>
> Or you could have the page returned to the user tell them that the
> results will be emailed to them (sometimes this is more
> appropriate/necessary if the processing takes several minutes or more).
>
> HTH
>
> Michael Peters
> Developer
> Plus Three
>
> ---------------------------------------------------------------------
> Web Archive: http://www.mail-archive.com/[EMAIL PROTECTED]/
> http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ---------------------------------------------------------------------
> Web Archive: http://www.mail-archive.com/[EMAIL PROTECTED]/
> http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
Web Archive: http://www.mail-archive.com/[EMAIL PROTECTED]/
http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]