В следующем примере (не весь код включен только необходимые части):Использование же подталкивание: переменная нить для создания нескольких потоков
class A
{
public:
void FlushToDisk(char* pData, unsigned int uiSize)
{
char* pTmp = new char[uiSize];
memcpy(pTmp, pData, uiSize);
m_Thread = boost::thread(&CSimSwcFastsimExporter::WriteToDisk, this, pTmp, uiSize);
}
void WriteToDisk(char* pData, unsigned int uiSize)
{
m_Mtx.lock();
m_ExportFile.write(pData, uiSize);
delete[] pData;
m_Mtx.unlock();
}
boost::thread m_Thread;
boost::mutex m_Mtx
}
это безопасно, чтобы использовать m_Thread таким образом, так как метод FlushToDisk может вызывается, когда созданный поток выполняет метод WriteToDisk. Или я должен делать что-то вроде:
m_Thread.join();
m_Thread = boost::thread(&CSimSwcFastsimExporter::WriteToDisk, this, pTmp, uiSize);
ли это второе решение будет медленнее, чем первый?
Из того, что я видел в http://www.boost.org/doc/libs/1_59_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial «Когда объект подталкивание :: поток, который представляет собой поток выполнения уничтожаются поток отрывается. После того, как поток отрывается, он будет продолжать выполнение до вызова функции или отозвана объект, поставленный на строительство, завершен или программа завершена ». Так что в моем случае нити не должны прерываться или?
Заранее спасибо.