от няколко часа сега се опитвам да разбера как да чета знаци от cin, преди да натисна ENTER (чрез използване на нишки). Знам за библиотеката conio.h, но предпочитам да не я използвам.
Написах проста програма, която получава данни от потребителя и ги записва в низ "msg". Програмата има дъщерна нишка, която изчиства конзолата всяка секунда. Това, което искам да направя е:
- Потребителят въвежда някои данни, но не натиска ENTER, така че те не се записват в променливата „msg“.
- Конзолата се изчиства
- изпрати, за да изведе въведените от потребителя символи, така че той дори няма да забележи, че конзолата е изчистена.
PS. Съжалявам за моя английски, ето програмата:
#include<iostream>
#include<string>
#include<winsock2.h>
#include<process.h>
#include<windows.h>
using namespace std;
void __cdecl ThreadProc( void * Args )
{
while( true ){
system("cls");
cout << "Input: ";
/*
char c;
while((c=cin.peek()) != '\n')
cin.get(c);
cout << c;
*/
Sleep(1000);
}
_endthread();
}
int main(){
HANDLE hThread =( HANDLE ) _beginthread( ThreadProc, 0, NULL );
while (true){
string msg;
getline(cin,msg);
cout << "MSG:" << msg << endl;
cin.clear();
fflush(stdin);
}
return 0;
}
РЕДАКТИРАНЕ:
Key-logger? Не, правя конзолен мрежов чат. В момента сървърът и клиентът могат да разговарят помежду си. Когато се получи или изпрати ново съобщение, то се записва във „vector‹\string> chat“ и конзолата се обновява под кода:
void show_chat(){
system("cls");
for(unsigned int i =0;i<chat.size();i++){
cout << "[" << date[i].tm_hour << ":" << date[i].tm_min << ":" << date[i].tm_sec << "] " << chat[i] << endl;
}
cout << "Input: ";
}
Така че има проблем, ако се получи ново съобщение, докато потребителят пише собственото си съобщение. Част от съобщението, написано преди системата за съобщения ("cls"), се губи на екрана.
cin
- но вероятно бихте могли да направите нещо подобно, което работи за вас), или да използвате библиотеки на трети страни (curses или подобни). - person Mats Petersson   schedule 22.05.2013cin
от повече от една нишка почти сигурно ще причини всякакви лоши неща. - person Mats Petersson   schedule 22.05.2013