Тема: Таймер и ожидание выполнения LISP-команд

Доброго всем времени суток!

Вопрос у меня достаточно короткий.
Как добиться последовательного выполнения команд?
Есть такой код:

// ----- ads_startMyCmd symbol (do not rename)
    static int ads_startMyCmd(void)
    {
        //----- Remove the following line if you do not expect any argument for this ADS function
        struct resbuf *pArgs =acedGetArgs () ;
        // TODO: add your code here
        acedGetAcadFrame()->SetTimer(10, 3000, TimerProc);        
        // TODO: Replace the following line by your returned value if any
        acedRetVoid () ;

        return (RSRSLT) ;
    }

    // Timer Proc function...
    static void CALLBACK EXPORT TimerProc(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime)
    {
        //acedGetAcadFrame()->KillTimer(10);// and kill the timer...

        if (curDoc()->isQuiescent())
          StartLisp();
        
    } 

    // starten LISP-Routine.
        static void StartLisp(void)
    {
      Acad::ErrorStatus es;
          es = acDocManager->sendStringToExecute(curDoc(), _T("(load \"c:\\\\Temp\\\\myPrj.VLX\")\n");
          if (es != Acad::eOk)
            MessageBox(acedGetAcadFrame()->m_hWnd, _T(""myPrj.VLX"), _T("myPrj.VLX"),MB_ICONERROR);

          es = acDocManager->sendStringToExecute(curDoc(), _T("(load \"c:\\\\Temp\\\\myPrj.LSP\")\n");
          if (es != Acad::eOk)
            MessageBox(acedGetAcadFrame()->m_hWnd, _T("myPrj.LSP"), _T("myPrj.LSP"),MB_ICONERROR);

          es = acDocManager->sendStringToExecute(curDoc(), _T("(myLispFunc \"arg1\")\n");
          if (es != Acad::eOk)
            MessageBox(acedGetAcadFrame()->m_hWnd, _T("myLispFunc"), _T("myLispFunc"),MB_ICONERROR);

         curDwg = acDocManager->curDocument();
         NewDocOpen();
         acDocManager->closeDocument(curDwg);
     }

     //-----------------------------------------
     static void newSyncDocHelper( void *pData)
     {
        Acad::ErrorStatus es = Acad::eNoDocument;
        AcApDocument* pDoc = acDocManager->curDocument();
        if (acDocManager->isApplicationContext())
          es = acDocManager->appContextNewDocument((const TCHAR *)pData);
    
        acutPrintf(L"\nМы в новом документе!!!");
        acDocManager->activateDocument(pDoc);
    }

    static void NewDocOpen(void)
    {
        // Add your code for command NewDoc.newdoc here
        static TCHAR pData[] = _T("L:\\VSS_CADBAT2006\\DWG\\ACADM.DWT");
        AcApDocument* pDoc = acDocManager->curDocument();
        if (pDoc)
            acDocManagerPtr()->executeInApplicationContext(newSyncDocHelper, (void *)pData);

        acutPrintf(L"\nМы в старом документе!!!");
    }

В 'myLispFunc' выполняются какие-то действия и чертеж сохраняется.
Таймер повторяет эти действия и т.д.

К сожалению после первого созданного чертежа код выдает ошибку и AutoCAD падает.
Т.е., как я понимаю, таймер продолжает работать, пытается запустить повторно всю процедуру и рушит AutoCAD.
Мне надо каким-то образом дождаться выполнения всего кода, сохранить чертеж, открыть новый и закрыть старый, потом снова запустить таймер или что-то в этом роде.

Подскажите куда копать, если можно с примером.
Надеюсь мой код понятен.

Спасибо.

Re: Таймер и ожидание выполнения LISP-команд

Неужели в течении месяца никто не может ничего посоветовать?
Или я не точно описал проблему?

Re: Таймер и ожидание выполнения LISP-команд

Sergej пишет:

Неужели в течении месяца никто не может ничего посоветовать?

Или не может, или не хочет. Как минимум таймер нужно убивать.