Steuerelement hakt warum



  • Hallo,

    ich habe ein Problem wo ich absolut nicht weiter weis und auf Eure hilfe hoffe.

    Ich habe eine CListCtrl die ich in einem Thread der die serielle Schnittstelle abfraget aktualisiere. Normal macht er das problemlos aber aus irgend einem mir nicht erkennbaren Grund hakt er dann an der im Quelltext aufgezeigten Stell. Bitte helft mir denn ich habe absolut keinen Plan woran das liegen mag.

    Danke im Voraus

    Die vom Thread aufgerufene Routine
    
    void CRepairDlg::UsartLoop()
    {
     do
     {
      m_nUsartBuff = 0;
      m_pSerial->m_nBytesCount = 0;
      m_nUsartBuff = m_pSerial->Receive();
    
      if(m_pSerial->m_nBytesCount != 0)
       m_pSerial->m_bReceiveFlag = TRUE;
    
      // Das Byte 15 dient zum abfragen zweier Zustände (Fehler=255, Normal=0)
      if(m_nUsartBuff == 15)
      {
       m_pRC3TestDlg->Delay(1000);
       m_nUsartBuff2 = m_pSerial->Receive();
      }
    
      else
       CheckOutputsRep(m_nUsartBuff);
    
       Sleep(2);
      }
     while(m_bUsartLoopFlg);
    }
    
    Aufruf der Routine 
    
    void CRepairDlg::CheckOutputsRep(int portval, int delay)
    {
    int compVal[3]={16, 4, 2};
    int i = 0;
    int tmp = 0;
    int buff = 0;
    
    if((m_pSerial->m_bReceiveFlag == TRUE) && (m_bTestFlg == FALSE) && (m_nSaveVal != m_nUsartBuff))
    {
     for(i=0; i<=2; i++)
     {
       buff = m_nUsartBuff;
       tmp = compVal[i] & buff;
    
       // Bit an Porta gesetzt ?
       if(tmp == compVal[i])
       {
       // Fehler ?
       if(compVal[i] == 2)
        m_ctrlOutputs.SetItemText(0, 6, "TRUE");
    
        // Normal ?
        if(compVal[i] == 4)
         m_ctrlOutputs.SetItemText(0, 5, "TRUE");         // !!! hier scheitert der Aufruf
    
        // Ausgang ?
        if(compVal[i] == 16)
         m_ctrlOutputs.SetItemText(0, 7, "TRUE");
       }
     }
    m_pSerial->m_bReceiveFlag = FALSE;
    }
    
    BOOL CListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
    {
      ASSERT(::IsWindow(m_hWnd));
      ASSERT((GetStyle() & LVS_OWNERDATA)==0);
      LVITEM lvi;
      lvi.iSubItem = nSubItem;
      lvi.pszText = (LPTSTR) lpszText;
      return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);
    }
    
    Hier hakt das Programm beim Return von SendMessage
    

Anmelden zum Antworten