|
Boost Users : |
Subject: [Boost-users] [ASIO] Where to use CoInitizeEx
From: Daniele Barzotti (daniele.barzotti_at_[hidden])
Date: 2009-06-03 04:49:27
Hi,
in a library I have a factory function that creates objects:
---- Main Library File ----
// Main io_service
static boost::asio::io_service io_service;
static boost::scoped_ptr<boost::thread> io_service_thread;
static boost::asio::io_service::work* p_work;
static BOOL thread_started;
EXTERN_C EUROATLIB_API TETRAMotoHndl CALL GetTETRAMotoObj()
{
if (!thread_started) {
try {
// create the work object on the heap
p_work = new boost::asio::io_service::work(io_service);
// run the IO service as a separate thread
io_service_thread.reset(
new boost::thread(
boost::bind(&boost::asio::io_service::run, &io_service)
)
);
thread_started = !thread_started;
} catch (boost::thread_resource_error e) {
// Failed to create the new thread
return 0;
}
}
// create the new object
TETRAMoto* pTETRAMoto = new TETRAMoto(io_service);
// Assign a reference to io_service work object:
// This reference is used to counting the objects created.
// When the last TETRAMoto object is deleted the main work object
// is destroyed and the io_service thread ends.
pTETRAMoto->_io_work_ptr.reset(p_work);
// return the object
return pTETRAMoto;
};
---------------------------------
These TETRAMoto objects creates another object, ATDispatcher, that use a
SerialPort (which is a wrapper around asio::serial_port) to
continuously read and write to RS232.
When the SerialPort receive data, pass it to the ATDispatcher that
raises a signal to the TETRAMoto object that parses the data and raise
the event (always a signal) to the extern:
asio::serial_port -> SerialPort -> ATDispatcher -> TetraMoto -|-> EXTERN
Now I have to encapsulate this lib into an ActiveX DLL to be used by VB6
and I have to call CoInitizeEx in the thread that "raise" events..
My question is: where I have to call CoInitizeEx?
Thanks in advance,
Daniele.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net