Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Frame aus Thread erstellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.12.2005, 14:54 Uhr
lsybimbo



Hallo,

ich kaempfe seit geschlagenen 3 Wochen mit folgendem Problem:

Wenn ich aus einem Thread einen neuen Frame oeffnen will, zeigt er den Frame zwar in der Taskleiste an, er schmiert dann aber ab. Wenn ich den Frame aus dem Kontstuktor erstelle funktioniert alles einwandfrei, nur aus dem Thread heraus geht es nicht.

Genaueres:
Ich benutze Windows Server 2003 SP1 SDK und fuer den Frame den wxFrame von wxWidgets. Nachdem ich den Thread erstelle

m_hLineMsgThread = CreateThread(NULL,NULL,LineEventThread,this,NULL,0);

warte dieser auf eine Event (bei mir ein Anruf der ueber TAPI ausgelesen wird). Aus diesem Thread soll dann ein neuer Frame geoeffnet werden.

Hierbei schmiert er ab, kann mir jemand helfen?

Tausen Dank...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2005, 19:22 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
wenn du die entsprechenden Codestellen postest erhöht dass deine Chancen auf ne Antwort enorm.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.12.2005, 20:12 Uhr
lsybimbo



Das Ding is, dass das sehr viele Codestellen sind...

hier eine kurzversion:

ERSTELLUNG DES THREADS:


C++:
m_hLineMsgThread = CreateThread(NULL,NULL,LineEventThread,this,NULL,0);



AKTION BEI EVENT AUS DIESEM THREAD:



C++:
DWORD WINAPI CTapiLine::LineEventThread(LPVOID lpVoid)
{
    CTapiLine *pcTapiLine = (CTapiLine *)lpVoid;
    long lRet;
    CREATEDEBUGCLASS;
    LOG("CTapiLine::LineEventThread - started");



    //is needed for callmap key management
    wxString callKey;
    
    //pointer to callMap of pcTapiLine
    CallMap* containerCallMap = pcTapiLine->ptrCallMap;

    ////TEST AUFRUF
    wxString myckey;
    myckey.Printf("66474");

    //Hier ein Call erzeugt in dem dann der Frame aufgerufen wird
    //das klappt nicht...
    containerCallMap->createCall(myckey);
    Customer mycust;
    retrieveCustomerInformation((char*)"1158034388",&mycust);
    (containerCallMap->getCall(&myckey))->UpdateCustomer(mycust);
    //TEST END
    return 0;
}




METHODE DIE EIN CALL OBJEKT ERZEUGT

C++:
//create CallObject and insert into HashMap
int CallMap::createCall(wxString key) {
    
    myCallHashMap[key]= new LsyCall((char*)key.c_str(),myUser,this);

    //HANDLE h_toSuicideThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)waitToCommitSuicide,(LPVOID)myCallHashMap[key],NULL,0);
    //myHandleMap[key]=h_toSuicideThread;

    return 0;
}




METHODE DIE EINEN LSYCALL ERZEUGT UND DEN FRAME OEFFNET

C++:
LsyCall::LsyCall(char *key,User* user, CallMap* myMap)
{
    CREATEDEBUGCLASS;    
    LOG(returnString("LsyCall initialized. Key: ",key));

    //set backpointer to Container Map
    HoldingMap = myMap;

    //Bastian - test
    /*wxString myckey = _T("66474");
    callKey = wxString(myckey);*/


    // key for the call
    callKey = wxString(key);

    // flag signalling whether call is taken or not
    isTaken = false;

    // Pointer to user info (password, username)
    myUser = user;

    // flag signalling if deleted directly
    waitDelete = false;
    
    // is fired when call taken
    h_signalCallTaken = CreateEvent(NULL,0,0,NULL);

    //Pointer to PopupWindow
    //DAS KLAPPT NICHT!!!!
    myCallFrame = new callFrame(&callCustomer,myUser,callKey,myMap);
    
    //HIER WIRD DER FRAME NICHT ANGEZEIGT!!
    myCallFrame->Show(true);

}




Das Programm soll einen eingehenden Anruf ueber TAPI aus einer Telefonanlage auslesen. Das klappt soweit, nur kann ich dann aus dem thread, der sozusagen die Telefonanlage ueberwacht das Fenster nicht anzeigen.

Bin ich jetzt hilfewuerdiger bzw. - faehiger?

Danke...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2005, 20:19 Uhr
(un)wissender
Niveauwart


Fenster könne nur aus dem Mainthread angezeigt werden. Du must also eine Message mit ::SendMessage oder :.Postmessage an eine laufende MessageQueue senden. Zur Not musst du dir halt ein unsichtbares Fenster machen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: