Powered by Invision Power Board


  Reply to this topicStart new topic

> Timer/Thred-Static Problem
WolfCH
  geschrieben am: 06.09.2009, 21:23
Quote Post





Gruppe: Mitglieder
Beiträge: 1
Mitglieds-Nr.: 754
Mitglied seit: 06.09.2009



Hallo Zusammen

Ich habe im Dialog ein Textfeld IDC_STATICWARN mit der Variable m_ctlStaticWarn (Control-Variable).

Mit Hilfe eines Threads möchte ich über das Internet laufend die Warnungen mittels PHP-Datei auslesen und diese dann im Textfeld anzeigen lassen. Wenn die Warnung geändert wird, sollte dies entsprechend auch im Textfeld geschehen.

Ich löse es zur Zeit so, dass ich im Thread ein Sleep(1000); setze und anschliessend nochmals der Textfeld-Inhalt mit pStatic->SetWindowText(""); auf null setze. Anschliessend wieder ein Sleep(1000); damit der Timer eine Sekunde wartet und danach erneut den Warnsattus prüft und anzeigt.

Leider geht das nicht so wie ich möchte!! Zwar wird die Warnung angezeigt, das gesamte Textfeld gelöscht, ABER dann wird der warntext einfach hinter den ersten drangehängt... das heisst ,jede Sekunde steht wieder ein weitere Text, statt alle gelöscht und nur EINER stehen würde.

Beispiel:
Testwarnung (sollte bleiben bis es geändert wurde).

Mein Programm macht aber:

Testwarnung

Nach 1 Sekunde:

Testwarnung Testwarnung

Nach 2 Sekunden

Testwarnung Testwarnung Testwarnung ...

aber genau das möchte ich nicht. Wo ist hier was faul??? Ich komme einfach nicht dahinter.. hier mal der Code:

Der Timer wird gestartet (der Parameter für CSTRING StaticText wird mitübergeben):
CODE
//Timer / Thread starten
LPVOID pParam = &m_ctlStaticWarn;
  ::AfxBeginThread(WarnList,pParam);


Hier der Thread:
CODE
UINT CHauptDlg::WarnList(LPVOID pParam)
{
//Aktuelle Warnungen laden und im Editfeld anzeigen
CString somecode, s;      
    CInternetSession session("Warnlist",1,INTERNET_OPEN_TYPE_PRECONFIG);

    CStdioFile* pFile = NULL;  
 CString strUrl("http://www.nfws.ch/inc/warnlist.php");
do
{
     
  try  
  {  
          pFile = session.OpenURL(strUrl,1,INTERNET_FLAG_TRANSFER_BINARY,NULL,0);

       if(pFile)  
       {          
           while (pFile->ReadString(somecode) != NULL)  
           {  
               s = s + somecode;  
           }  
           pFile->Close();  
       }      
  }  
  catch (CInternetException* e)  
  {        
       e->Delete();
       session.Close();
       CloseHandle(session);  
  }

  CStatic *pStatic = (CStatic*)pParam;
  pStatic->SetWindowTextA(s); //Hier wird die Warnung ans Textfeld übergeben
  Sleep(1000);
  pStatic->SetWindowTextA(""); //Hier sollte das Feld wieder gelöscht werden
  Sleep(1000); //Eine Sekunde warten bevor erneut die warnung überprüft und übergeben wird, allerdings schlägt das leider Fehl!!


}while(1+1);

return 0;
}


Den Thread starte ich in "OnInitDialog" weil der automatisch starten und endlos laufen sollte !
Hat jemand eine Lösung eine Antwort??

LG aus der Schweiz
Greetz Wolf und danke schon zum Voraus
PMEmail Poster
Top
NetPanther
geschrieben am: 06.09.2009, 23:10
Quote Post


Administrator


Gruppe: Administratoren
Beiträge: 7.696
Mitglieds-Nr.: 1
Mitglied seit: 29.08.2004



Guten Abend,

und willkommen bei Planet-Quellcodes.de! Ich würde nochmal einen Blick auf nachfolgende Zeile werfen. wink.gif

CODE
s = s + somecode;


MfG


--------------------
:: NetPanther :: NetPanther@gmx.net :: Website :: IRC Channel: #NetPanther ::

Das Leben ist eine Beta. Nichts ist vollkommen.
PMEmail PosterUsers WebsiteICQAOLYahooMSN
Top
1 Besucher zu diesem Thema (1 Gäste und 0 'versteckte' Mitglieder)
0 Mitglied(er):

Topic Options Reply to this topicStart new topic

 



[ DB Queries: 11 ]   [ Execution Time: 0.0471 ]   [ GZIP aktiviert ]