Author: James Swafford
Date: 17:27:09 07/24/99
Go up one level in this thread
On July 24, 1999 at 17:19:31, James Swafford wrote: I've done some experimenting today, and discovered that gcc (or at least the cygwin port) will not let a multithreaded program terminate until each thread in the program has called exit( ), or returned from main. One frustrating question still remains. Please examine the code segment below: ********** ui_thread_is_dead=0; // start ui thread // beginthread(UIThread,0,0); if (!fork()) { UIThread(NULL); ui_thread_is_dead=1; cout << "terminating child thread...\n" << flush; return 0; } cout << "executing parent thread\n"; while (!ui_thread_is_dead) { } cout << "terminating parent thread...\n" << flush; return 0; ********** Once the program starts, the friendly message "executing parent thread" is displayed. Once I type "quit," which is handled by UIThread( ), the message "terminating child thread..." is displayed. At this point the variable ui_thread_is_dead *should* be=1, but for some reason it's not. The message "terminating parent thread" is never displayed, and the program never terminates. Ugh. Any insight would be greatly appreciated. :-/ -- James > >I posted a question several days ago about the gcc >equivalent to MSVC's "beginthread( )" . > >Bob replied with "fork( )", which does the job, but >there's one rather ugly side effect: the program >won't terminate. > >To be more specific, when I type "quit", the user >thread parses the input and processes it, but for >some reason when the call to exit( ) is performed, >the whole process freezes. The same thing happens >when executing "return" from main( ). > >This doesn't happen when the program is running test >suites, simply because the UIThread( ) is never started. >When the suite is complete, the program exits cleanly. > >Perhaps threads are handled differently than with MSVC. >Is it okay to call exit( ) from within UIThread( )? >Would it be better to have UIThread( ) return some variable >indicating the program should terminate, then somehow kill >the thread, then call exit( ) from the "main thread"? If so, >how do I kill a thread with gcc / cygwin? > >-- >James
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.