Привет, народ!
Ситуация такая: есть приложение, в котором запускается дополнительный поток.
И еще есть класс(синглтон), который используется как основным потоком, так и дополнительным потоком приложения. В синглтоне есть некая функция SendStopAppSoft(), которая вызывает еще что-то через OLE/COM, но это уже не суть.
Когда я вызываю эту функцию в основном потоке, все отрабатывает нормально, а когда в дополнительном, ничего не работает. Хотя я прохожу дебаггером и значения все те же.
ПОЧЕМУ НЕ РАБОТАЕТ?
Вот примерный код:
// Синглтон
class CTerminalSoftAuto : public CCmdTarget
{
public:
static CTerminalSoftAuto* GetInstance()
{
static CTerminalSoftAuto self;
return &self;
}
void SendStopAppSoft()
{
бла-бла-бла
}
}
// Основной поток
class CDevicedispDlgAuto : public CDialog
{
CTerminalManager *pTerminalManager;
CTerminalSoftAuto *pTerminalSoftAuto;
virtual BOOL OnInitDialog()
{
pTerminalSoftAuto = CTerminalSoftAuto::GetInstance();
// Запускаем доп. поток
pTerminalManager = (CTerminalManager*)AfxBeginThread(RUNTIME_CLASS(CTerminalManager));
}
void SomeFunc()
{
бла-бла-бла
pTerminalSoftAuto->SendStopAppSoft(); // ОТРАБАТЫВАЕТ НОРМАЛЬНО
бла-бла-бла
}
}
// Дополнительный поток
class CTerminalManager : public CWinThread
{
CTerminalSoftAuto *pTerminalSoftAuto;
virtual BOOL InitInstance()
{
pTerminalSoftAuto = CTerminalSoftAuto::GetInstance();
return TRUE;
}
void AnotherFunc()
{
бла-бла-бла
pTerminalSoftAuto->SendStopAppSoft(); // НЕ ОТРАБАТЫВАЕТ НОРМАЛЬНО!!! ПОЧЕМУ???
бла-бла-бла
}
}
P.S. Использую C++; VS2005; WinXP