[prev in list] [next in list] [prev in thread] [next in thread]
List: gnome-devel-list
Subject: Re: How to maintain responsiveness during long functions?
From: Owen Taylor <otaylor () redhat ! com>
Date: 1999-06-28 4:57:25
Message-ID: ybewvwoylai.fsf () fresnel ! labs ! redhat ! com
[Download RAW message or body]
Ian Peters <itp@gnu.org> writes:
> Hello,
>
> Recently, two people have sent me some very good reversi algorithms
> for inclusion into iagno. Since many people have complained about the
> skill level of the computer players (very low), this is a good thing.
> However, obviously both algorithms need to spend a good bit of time
> thinking, and currently, this means that the game does not respond (ie
> menus, redraws, etc are not handled) until the computer makes its
> move.
>
> What is the `proper' way to handle this? Is there any simple way to
> tell it to process any pending events at critical junctions in the
> algorithm, or do I have to either restructure the algorithms to work
> through with the gtk event system, or make the application threaded?
As people have mentioned, you can periodically check
for events.
(The "modern" way of doing this is:
while (g_main_iteration(FALSE))
/* Nothing */;
)
If this is not sufficient, I would suggest splitting
the program into front-end/back-end. Since reversi
is stateless, you can do this easily enough. The protocol
would look something like:
Frontend: (color of player and current board position)
BLACK ----B---W---B-WW---BBWB--
Backend: (next move)
2,3
Combined with a io handler, this makes it very
easy to make the front end responsive, and write
the backend in a simple fashion.
Cancellation (for instance, if the user hits the
undo button while the computer is thinking) is easy -
you just kill the current backend process and
start a new one.
Regards,
Owen
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic