Anonymní profil Jirka Sp. – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jirka Sp. – Programujte.comAnonymní profil Jirka Sp. – Programujte.com

 

Příspěvky odeslané z IP adresy 84.16.113.–

C / C++ › Qt thread server - problém s…
16. 4. 2012   #156682

mě jde např. jenom o pět současně...

#6 ingiraxo pokud bych to řešil bez vláken (u simulace), tak si závolám funkci třeba emitováním signálu. Spustí se simulace, začne odesílání dat clientu. Ale když v tom přijde další požadavek na simulaci, tak já budu muset čekat až se mi vykoná předešlá. Já bych právě chtěl, aby šli obě (více) současně. Tady asi bude hlavní vlákno nevytížené, to bude čekat na dlaší požadavky které mu přijdou. Popřípadě mu budou předávány výstupní data z vláken aby je posílal.

a jak to myslíš asynchronně, jsem myslel že když vytvořím vlákno, tak se v něm vše dělá samo bez ohledu na ostatní vlákna. Nebo tam je nějaká synchronizace?

C / C++ › Qt thread server - problém s…
16. 4. 2012   #156678

#4 ingiraxo
Aha díky za radu.

Ale abych ti osvětlil můj problém. Mám server který slouží jako repozit a zároveň se na něj mohou spouštět simulace. Clienta, který se připojí na server pomocí jména a hesla. Může si ze serveru natáhnout nějaký soubory (jedna funkcionalita) a nebo požádat o simulaci (druhá). Ta trvá např. dvě minuty (každou sekundu se něco pošle). Bohužel si těch simulací může spustit více.

Takže asi pokud by to šlo, clienty bych řešil normálně. Předat do funkce pro obsluhu socketDescriptor? A pokud by byl požadavek na simulaci, tak až poté vytvořit thread se simulací (předal bych asi také socketDescriptor).

Nebo jsem dostal tip, abych na clientovi (při druhé+ simulaci) začal novou instanci clienta - připojit se znovu na server. Ale simulaci bych asi musel řešit také v novém vlákně.

C / C++ › Qt thread server - problém s…
15. 4. 2012   #156641

Já chci navázané spojení udržet a komunikovat v něm třeba 2 minuty nepřetržitě (tzn. otázka - odpověď) pak třeba 5minut čekat a zase komunikace. To nevím jestli by to bez těch threadu šlo. Tam je podle mě možno vytvořit více socketů, ale nevím jak bych se v nich vyznal. 

Thready chci použít i kvůli tomu, že jeden client může mít i dvě paralelní komunikace a to bych chtěl řešit novým připojením od clienta a tudíš novým threadem na straně serveru.

Ten ThreadPool je zajímavý, ten mě nenapadnul. Ale pořádně nevím jak to naimplementovat a zda to vůbec nějako takto jde...

C / C++ › Qt thread server - problém s…
15. 4. 2012   #156628

Zdravím, chtěl bych udělat server (se spojením TCP), který bude připojené clienty obsluhovat každého zvlášť v threadu. Mám třídu Server (dědí QTcpServer) a jeho reimplementovanou funkci incomingConnection(), kde vytvořím nový thread: 

Thread *thread = new Thread(this, socketDescriptor);
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    thread->start();

    connect(thread, SIGNAL(acceptedRequest(QString)), this, SLOT(acceptedRequest(QString)));

poté:

void Thread::run() {

    // pokud nepujde novemu socketu nastavit predavany descriptor
    tcpSocket = new QTcpSocket();
    if(!tcpSocket->setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocket->error());
        return;
    }

    connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receivingRequest()));

    //emituji signal o odeslani pozadavku na login
    emit acceptedRequest("NEW");

    exec();

}

  Po prvním připojením proběhne vše v pořádku. Clientovi je odeslán požadavek na login. Jenže odpověď která přijde už není serverem zpracována. Thread je už "mrtví" a na nic nereaguje.

Nevím jak mám zajistit, aby byl thread spuštění a čekal na další příchozí požadavek.

Díky za každý tip

C / C++ › Qt - komunikace mezi třídami
31. 3. 2012   #155776

Zdravím, chtěl bych vytvořit programy server-client (pro začátek jednoduché zasílání zpráv).

Podle příkladu na stránkách qt (http://doc.qt.nokia.com/4.7-snapshot/network-fortuneserver.html a http://doc.qt.nokia.com/4.7-snapshot/network-fortuneclient.html) mi vše jde, ale jelikož program bude nakonec vykonávat více úkonů, potřeboval bych na toto vlastní třídu. To mi však nejde. Nejde mi předávání signálu uvnitř objektu Client, který si vytvořím v hlavní třídě MainWindow

Vypisování přijaté informace řeším pomocí emit a argumentu signálu, který zachytíMainWindow. Toto mi jde, ale jakmile je vytvořen signál v třídě Client,který má být v této třídě zpracován, nic se neděje.

Bohužel jsem na žádný návod na netu nenarazil.

Mockrát díky za každý tip.

Jirka Sp.
C / C++ › čtení ze souboru po řádcích
20. 4. 2009   #99543

Dobrý den, chtěl bych porovnat dva textové soubory a zjistit čísla řádků, v kterých se tyto soubory liší. Chtěl bych je proto číst po řádcích a ty mezi sebou porovnat. Funkce fgetc bohužel čte jenom po znacích a to mě moc nepomůže. Prosím poradtě, nejedná se o domácí úkol, ale chtěl bych to vyřešit pro vlastní potřebu. Předem děkuji

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý