Chmatákov online


Fórum – C++ běh dvou příkazů naráz

Fórum » Diskuse mimo mísu » C++ běh dvou příkazů naráz

Honzan
uživatel
Obrázek
Ve hře: Ab31ch
SZ Skype
Ahoj, potřeboval bych s něčím poradit a vím, že tu dost lidí programovalo, tak to píšu sem. :D

Učím se s knihovnou winsock. Zkoušel jsem udělat chat, s tím že si prostě budou moct dva a více lidí mezi sebou moct psát. Problém je v tom, že nevim jak udělat, aby se zároveň mohly přijímat a zobrazovat zprávy, ale uživatel mohl stále psát nějakou zprávu.

když udělám něco jako je toto:
(v závorkách to je pro lidi, kteří nedělají s iostream knihovnou)


char Zprava[256];
SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL)
connect(Connection, (SOCKADDR*)&addr, sizeofaddr)

while(1)
{
cin >> Zprava; (scanf)
send(Connection, Zprava, sizeof(Zprava),NULL);
recv(Connection, Zprava, sizeof(Zprava),NULL);
cout << Zprava << "n"; (printf)

}



Hodně sem ten kód zkrátil, ale myslím, že každej chápe co tam chybí, a o tom v tomhle případě vůbec nejde.

tak jakmile dojdu k cin >> Zprava, tak se nebudou uživateli zobrazovat zprávy dokud nějakou nepošle. Problém nastává i ve chvíli, když chce jeden uživatel napsat 2x zprávu po sobě, protože jakmile něco napíše, musí počkat než mu přijde další zpráva, aby mohl zase psát.
# 30.6.2016 17.40
 
Maly John
moderátor
Obrázek
Ve hře: Makající John, Honík
SZ ICQ Web
Jde ti o to udělat ze synchronní komunikace asynchronní. Prostředky pro to určitě jsou (řekneš, že nechceš čekat na vyhodnocení příkazu a jdeš dál). Něco jsem našel tady [1], ale googli dál.

[1] stackoverflow.com/questions/5645375/how-do-i-make-a-function-asynchronous-in-c
# 1.7.2016 8.55
Nobody's perfect. My name is Nobody.
Dva smajlíci = emoce, tři a víc = demence. :D :D :D
honik.wz.cz/chmat.html - kompletní návod na Chmatákov
Honzan
uživatel
Obrázek
Ve hře: Ab31ch
SZ Skype
Už to mám, ale díky, udělal jsem to přes CreateThread()
# 1.7.2016 14.53
 
Maly John
moderátor
Obrázek
Ve hře: Makající John, Honík
SZ ICQ Web
Taky možnost. Ale nekomplikuješ si život mezivláknovou komunikací? (jen zkouším, nevím, jak je to v C++ řešené).
# 1.7.2016 15.02
Nobody's perfect. My name is Nobody.
Dva smajlíci = emoce, tři a víc = demence. :D :D :D
honik.wz.cz/chmat.html - kompletní návod na Chmatákov
Honzan
uživatel
Obrázek
Ve hře: Ab31ch
SZ Skype
void Recieving()
{
int index;
char Zprava[999];
while(1)
{
recv(Connection, (char*)&index, sizeof(index),NULL);
recv(Connection, Zprava, sizeof(Zprava),NULL);
cout << (int)index << ": " << Zprava << "n";
}
}

tohle je část kódu ve funkci main:
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Recieving,NULL,NULL,NULL);
char Zprava[999];
while (true)
{
cin.getline(Zprava,sizeof(Zprava));
send(Connection, Zprava, sizeof(Zprava),NULL);
Sleep(10);
}


Takhle to mám teď. Funguje to líp než jsem čekal.
# 1.7.2016 15.38
 

Fórum » Diskuse mimo mísu » C++ běh dvou příkazů naráz

Pro zasílání odpovědí se musíte přihlásit.



(Registrace)


↑ nahoru | © 2004–2009 Chmatákov Team. Všechna práva vyhrazena.