Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Konsola programu


Rekomendowane odpowiedzi

Opublikowano

Siemka.
Mam dzisiaj do was pytanie a mianowicie chodzi o  konsolę która tworzy mi niewielki problem a więc do rzeczy.

Mój program jest pisany w QT dlatego do utworzenia konsolki która informuje użytkownika o tym co dzieje się z bot'em użyłem kontrolki QListWidget jednak z tego co zauważyłem wywołuje on crash programu po jakimś czasie (ostatnio po ponad 2h 30min testu).
Teraz pojawia się pytanie skąd wiem że to ona  powoduje crasha?
Ponieważ kilka razy udało mi się zasnąć podczas oglądania filmu i w tle testowania stabilności bot'a co ostatnie 3 razy pokazało że po ponad 10-11 godzinach pracy wszystko dalej śmigało(testy bez konsoli oczywiście).
Po długiej historii wracamy do pytania.
Czy znacie może jakiś inny ciekawy sposób na utworzenie konsoli programu?



AAA i jeszcze. Bardzo możliwe że jest to spowodowane przepełnieniem kontrolki choć nie wiem czy to możliwe. Poza tym konsola przy każdym nowym logu odświeża się cała ponieważ program obsługuje wielu użytkowników i każdy z nich ma osobne logi dlatego raczej musi tak być.
 

Z góry dziękuję i pozdrawiam :-)

Opublikowano

Okey jeśli to też potrzebne dostaniesz kod :-)

Samo wyświetlanie:

bool AskWindow::Set_Logs(std::vector<std::string> vec)
{
    if(vec.empty()||vec.size()<1)
    {
        return false;
    }
    ui->listWidget_2->clear();
    for(unsigned int i=0;i<vec.size();i++)
    {
        ui->listWidget_2->addItem(vec[i].c_str());
    }
    return true;
}

A tutaj coś co wywołuje dodanie logów: funkcja ta jest wykonywana przez timer co 1 sec
 

bool Logs::set_logs()
{
    if(name.empty()||name.size())
        return false;

    if(debug)
    {
        //existing->Set_Logs(loges);
        return true;
    }
    else
    {
        vector<string> nodebug;
        for(unsigned int i=0;i<loges.size();i++)
        {
            if(loges[i].find("[Debug]")==string::npos&&loges[i].find("[DEBUG]")==string::npos)
                nodebug.push_back(loges[i]);
        }
        qDebug()<< lastlogs << "  "<<loges.size();
        if(lastlogs<loges.size())
            existing->Set_Logs(nodebug);
        lastlogs=loges.size();
        return true;
    }

    return false;
}
Opublikowano

Nie wiem czy to sie przyda ale doszedłem do tego że mój program pracuje na wielu wątkach i kiedy główny wątek dostaje crash to thread odświeżający konsole działa oraz wykonawcze wątki też działają. Czyli crash'uje się tylko GUI. Do tego zrobiłem kilka testów i w tym momencie wywala mi błąd(którego na początku nie było) pochodzący z 

ui->listWidget_2->addItem(vec[i].c_str());

brzmiący 

ASSERT failure in QVector<T>::at: "index out of range", file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 388
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

szukając w google odpowiedzi znalazłem tylko zgłoszenie do QT 4.6 obecnie mam QT 5.4.1

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...