Thread programming issue
Anita Yadav CS -- ayadav@grad.csee.usf.edu
Friday, April 05, 1996
Hi everyone,
I am using VC++ 4.0 to develop an SDI application for NT 3.51. My
application spawns several threads and two background programs. My
question is : before exiting the application how can I check if my
threads have terminated. I can check Exit status of individual threads
but keeping track of individual thread handles seems cumbersome. Is
there an effective way to do this task? Also, do I have to release
individual thread handles before the application terminates?
Any help will be appreciated.
Thanks.
Anita.
ayadav@csee.usf.edu
Mike Blaszczak -- mikeblas@msn.com
Saturday, April 06, 1996
[Mini-digest: 3 responses]
> I can check Exit status of individual threads
> but keeping track of individual thread handles seems cumbersome.
Sometimes, if you write software, you have to do work.
> Do I have to release individual thread handles before
It's good practice to make sure the threads you've spawned have neatly
terminated, just like it is good practice to make sure you've closed files and
freed memory.
.B ekiM
TCHAR szSpringtime[] = _T("Cogito ergo wheelie.");
-----From: "VARughese GEOrge"
i am afraid that you may have check te exist status (or signaled status) of
each thread to see if they have terminated.. i had a little more complex
problem in which the program spawns a number of worker threads to accomplish
certain tasks and if the same task is requested while one is already running,
the program should reschedule it until the running one is done. Since your
requirement is only to termite the threads you may be able to live without
keeping track of individual thread ids as well..
you may set an event signaling all threads to die when you want to exit the
application and your worker threads may look at this event and die
itself..(AfxEndThread)..alternatively for ui-threads use ::PostQuitMessage()
when you exit a process (ExitProcess) it shuts down all the threads of that
process.. so you need not necessarily kill all the threads yourself if you
don't want to..but the terminating process does not cause child process to be
terminated!.
but why is that keeping track of threads cumbersome?
vargeo
http://ramco_web.ramco.com/vargeo.htm
i lost sight of the shore.... but where are the new oceans.??..
-----From: Marty Fried
At 04:49 PM 4/5/96 -0500, CS wrote:
>Hi everyone,
> I am using VC++ 4.0 to develop an SDI application for NT 3.51. My
> application spawns several threads and two background programs. My
>question is : before exiting the application how can I check if my
>threads have terminated. I can check Exit status of individual threads
>but keeping track of individual thread handles seems cumbersome. Is
>there an effective way to do this task? Also, do I have to release
>individual thread handles before the application terminates?
You can keep a list of thread handles in an array, and use this to
WaitForMultipleObjects, then use the array to free the handles. That's
probably the right way to do it. Depending on what the threads are
doing, and what resources they may need to clean up, I believe you could
exit the program with threads active, and handles open, with no ill effects;
NT will clean up the remains. At least, that's the way it seems to work,
but I personally think it's not good programming to do that. Even if it's
safe now, programs get modified, and it may cause problems in the future.
________________________________
Marty Fried (mfried@linex.com)
Marin County, California
| Вернуться в корень Архива
|