[ace-users] Questions about ACE_Thread and ACE_Thread_Adapter

Douglas C. Schmidt schmidt at dre.vanderbilt.edu
Wed Aug 15 03:08:15 CDT 2007


Hi,

>Thanks so much for the detailed and timely response Doug!  

You are quite wecome.

>A few
>clarifications:
>
>- The code I am working on is going into a library which will not know
>if advance if there will or will not be an ACE_Thread_Manager already
>in existence, and I don't want to conflict with it if it does already
>exist.  My short lived thread only needs to do a few tasks and then
>terminate itself.  Also, for this particular task I can't bring in the
>ACE_Task overhead, at least for now.  There is a possibility that we
>will move to the Pipes and Filter approach later on in the grand
>scheme of things, but not now.  I was rather hoping that just using
>the lower level ACE_Thread::spawn would be ok, and at least provide me
>with platform independence as we build this on several flavors of
>UNIX, linux and Win32.

I recommend not using ACE_Thread::spawn() since it is not as portable
as ACE_Thread_Manager on those platforms.

>- The example you pointed me to in Thread_Manager.cpp does not show
>how and where the Thread_Adapter will be destroyed. ??

I'm not sure what you mean.  Check out this line in the
ace_thread_manager_adapter:

  delete static_cast<ACE_Base_Thread_Adapter *> (thread_args);

>- even if I use an auto_ptr for the Thread_Adapter the main problem is
>that the dtor is made private, so I guess it can't be destroyed, not
>on the stack automatically, not by calling delete manually and not by
>having auto-ptr call delete automatically for me.  But maybe I am
>missing something.  I see in the Thread_Manager.cpp code that you call
>new to create and adapter, and then spawn the thread.  But I don't see
>when the thread_args gets destroyed.

Please see above.

>- Unfortunately, my $ACE_ROOT tree does not seem to have the book
>examples you mentioned (5.5.1).  Not sure why.  I see other examples.
>My ACE_ROOT is ACE_Wrappers-5.5.1, which was setup by someone else so
>I'm not sure of the exact details.

Please upgrade to ACE+TAO+CIAO x.5.10 (i.e., ACE 5.5.10, TAO 1.5.10, and
CIAO 0.5.10), which you can download from

http://download.dre.vanderbilt.edu

under the heading: "Latest Beta Kit".

The DOC groups at Washington University, UC Irvine, and Vanderbilt
University only provide "best effort" support for non-sponsors for the
latest release, as described in

http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/docs/ACE-bug-process.html

Thus, if you need more "predictable" help for earlier versions of
ACE+TAO, I recommend that you check out

http://www.dre.vanderbilt.edu/support.html

for a list of companies that will provide you with ACE+TAO commercial
support.

>I have been able to start a thread with ACE_Thread::spawn.  At this
>point I can pass it a static C++ method by first creating an instance
>of ACE_Thread_Adapter, which wraps around the function.  However, I
>don't know how to clean up the adapter when I'm done, and also I was
>rather hoping to call a bounded method on an object instance, which
>appears to not be possible with my compiler since I can't get the
>address of the bounded function to pass to the Thread_Adapter
>constructor.  I am trying a work around where I pass a "this" pointer
>into a static method and then call a bounded method using that
>pointer.  And it sorta seemed to work, but I get core dumps at the
>first virtual method call inside the bounded function, so not sure if
>this hack is acceptable or not.

Again, please see Chapter 9 of C++NPv1
<www.cs.wustl.edu/~schmidt/ACE/book1/> for examples.

Thanks,

        Doug
-- 
Dr. Douglas C. Schmidt                       Professor and Associate Chair
Electrical Engineering and Computer Science  TEL: (615) 343-8197
Vanderbilt University                        WEB: www.dre.vanderbilt.edu/~schmidt
Nashville, TN 37203                          NET: d.schmidt at vanderbilt.edu



More information about the Ace-users mailing list