
Happyman0815
Mitglieder-
Gesamte Inhalte
22 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Happyman0815
-
Dateien kopieren ohne Erstellungs- und Änderungsdatum zu verändern...Wie gehts?
Happyman0815 antwortete auf Kaeyu's Thema in Java
Ja das hätte mir heute geholfen :floet: -
Mausbewegungen abfangen + Scrollrad
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Ansatz: #include <cstdlib> #include <iostream> HWND GetConsoleHwnd(void); using namespace std; int main(int argc, char *argv[]) { MSG messages; HWND hwnd = GetConsoleHwnd(); while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } system("PAUSE"); return EXIT_SUCCESS; } LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; case WM_LBUTTONDOWN: std::cout << "Linksklick"; break; case WM_MOUSEWHEEL: //MessageBox(hwnd,"Aktuelle Zeichenfarbe ist Weiss","lol",MB_OK); std::cout << "Scrollrad"; return 0; break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what is returned to the caller. char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated // WindowTitle. char pszOldWindowTitle[MY_BUFSIZE]; // Contains original // WindowTitle. // Fetch current window title. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); // Format a "unique" NewWindowTitle. wsprintf(pszNewWindowTitle,"%d/%d", GetTickCount(), GetCurrentProcessId()); // Change current window title. SetConsoleTitle(pszNewWindowTitle); // Ensure window title has been updated. Sleep(40); // Look for NewWindowTitle. hwndFound=FindWindow(NULL, pszNewWindowTitle); // Restore original window title. SetConsoleTitle(pszOldWindowTitle); return(hwndFound); } Leider werden die Messages nicht abgefangen :/ Es wird nur eine Message empfangen wenn ich die Fenster wechsel und dann wieder die Console in den Vordergrund hole. Gruß Happyman0815 -
Hallo Leute! Hat jemand eine Idee wie man in einer C++ Konsolenanwendung (kein MFC, etc.) Mausbewegungen abfangen kann? Ich möchte einen Punkt in einem drei dimensionalen Raum bewegen. => Mein 3 dimensionales Koordinatensystem hat die Achsen X, Y und Z. Nun habe ich mir gedacht das die Mausbewegungen nach rechts und links die x Koordinaten ändern und die bewegungen nach oben und unten die Y Koordinate. Das Scrollrad soll die Z Koordinaten übenehmen. Leider habe keinen Ansatz wie ich das realisiern könnte. Pseudocode: if( maus wird nach oben bewegt ) { Y++; } if( maus wird nach unten bewegt) { Y--; } if( maus wird nach rechts bewegt ) { X++; } if( maus wird nach ulinks bewegt ) { X--; } if( scrollrad wird nach oben bewegt ) { Z++; } if( scrollrad wird nach unten bewegt) { Z--; } Gruß Happyman0815
-
boost asio: Problem mit Servererstellung in einer Klasse
Happyman0815 antwortete auf Happyman0815's Thema in C und C++
JA das wars! Das hatte ich noch stehen. THX!! THX!! THX!! THX!! THX!! THX!! THX!! THX!! THX!! THX!! THX!! THX!! THX!! Man da hab ich doch tatsächlich jetzt gut 9 Stunden mit verbracht -.- Endlich funktionierts :beagolisc THX! Gruß HAppyman0815 -
boost asio: Problem mit Servererstellung in einer Klasse
Happyman0815 antwortete auf Happyman0815's Thema in C und C++
hmmm... bei deiner Variante meckert er jetzt. boost::asio::io_service io_service; tcp::acceptor acceptor2; tcp::socket socket2; create_serv_com( ) : acceptor2( io_service, tcp::endpoint(tcp::v4() , 13 )), socket2(io_service){} Fehler: Error 1 error C2512: 'boost::asio::basic_socket_acceptor<Protocol>' : no appropriate default constructor available 47 TCP Server Aber irgendwie so in der Richtung müsste es wohl funktionieren. -
boost asio: Problem mit Servererstellung in einer Klasse
Happyman0815 antwortete auf Happyman0815's Thema in C und C++
Wenn ich alles in eine Funktion packe, funktioniert es: using boost::asio::ip::tcp; void com_serv() { boost::asio::io_service io_service; boost::system::error_code error; boost::system::error_code ignored_error; try { tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13)); tcp::socket socket(io_service); acceptor.accept(socket); while(true) { mutex.lock(); std::cout << "Hello World!" << std::endl; wait(1000); mutex.unlock(); //Schreiben boost::asio::write(socket, boost::asio::buffer(buf), boost::asio::transfer_all(), ignored_error); //schreibt solange bis speicher voll (ca. 48259 Bytes) //Lesen size_t len = socket.read_some(boost::asio::buffer(buf), error); //Blockierende Funktion! if (error == boost::asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw boost::system::system_error(error); // Some other error. std::cout.write(buf.data(), len); //Ausgabe des gelesenen } } catch (std::exception& e) { std::cerr << e.what() << std::endl; } } ich habe nicht ansatzweise eine Ahnung. Wenn socket und acceptor Methoden sind, warum werden Sie dann z.B. wie folgt verwendet: size_t len = socket.read_some(boost::asio::buffer(buf_re), error); Daran sitz ich schon seit 5 Stunden :bimei -
boost asio: Problem mit Servererstellung in einer Klasse
Happyman0815 antwortete auf Happyman0815's Thema in C und C++
Da ich den Fehler nicht genau lokalisieren kann (es ist wohl ein verständnis Problem) poste ich einfach mal die gesamte Klasse: Class Header: #include <iostream> #include <string> #include <boost/asio.hpp> #include <boost/thread/thread.hpp> using boost::asio::ip::tcp; class create_serv_com : public tcp::acceptor { public: boost::array<char, 48259> buf_send; boost::array<char, 48259> buf_recv; boost::array<char, 48259> buf; boost::asio::io_service io_service; boost::system::error_code error; boost::system::error_code ignored_error; tcp::acceptor acceptor( io_service, tcp::endpoint(tcp::v4() , 13 )); tcp::socket socket(io_service); /*class Klasse { private: int& r; int const c; public: Klasse(int i) : r(i), c(i) { } };*/ void send(); void recv(); create_serv_com( boost::asio::io_service io_service_ );// : io_service(io_service_); ~create_serv_com(void); }; Class Quell: #include "StdAfx.h" #include "create_serv_com.h" #include <string> #include <iostream> #include <boost/asio.hpp> using boost::asio::ip::tcp; create_serv_com::create_serv_com(void) { buf_send = "Test!\n"; try { acceptor.accept(socket); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } } create_serv_com::~create_serv_com(void) { } void create_serv_com::send() { try{ //Schreiben boost::asio::write(socket, boost::asio::buffer(buf_send), boost::asio::transfer_all(), ignored_error); //schreibt solange bis speicher voll (ca. 48259 Bytes) catch (std::exception& e) { std::cerr << e.what() << std::endl; } } void create_serv_com::recv() { try{ //Lesen size_t len = socket.read_some(boost::asio::buffer(buf_re), error); //Blockierende Funktion! if (error == boost::asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw boost::system::system_error(error); // Some other error. std::cout.write(buf_recv.data(), len); //Ausgabe des gelesenen } catch (std::exception& e) { std::cerr << e.what() << std::endl; } } Der Sinn ist es eine Klasse aufzubauen die einen Server darstellt, mit einem (bis jetzt) vorgegebenen Port. Nach Erstellung des Objektes (Server) kann man mit den Member Funktionen recv(..) und send(..) Daten verschicken bzw. empfangen. Nun hapert es aber an den Objekterstellung die für die Sockets notwendig sind: boost::asio::io_service io_service; tcp::acceptor acceptor( io_service, tcp::endpoint(tcp::v4() , 13 )); tcp::socket socket(io_service); Hier übergebe ich den Klassen socket und acceptor das Objekt io_service. Genau das funktioniert aber nicht! Ich muss irgendwie eine Lösung dafür finden. Die Objekte socket, acceptor und io_service sollte global in der Klasse erreichbar sein. Ehemals war das ein Tutoriell für einen Server der mit Boost Bibliotheken erstellt wird (wegen plattformunabhängigkeit). Da funktioniert der Code auch bestens (es wurde dort alles in die main geschrieben). Jetzt habe ich den Code in eine Klasse gepackt und ich bekomm nur noch Probleme Gruß Happyman0815 -
Hallo Leute! Ich habe ein Problem bei der Erstellung einer Server Klasse. Also: Ich muss in meiner Klasse Objekte von anderen Klassen erstellen. Diesen Klassen muss ich eine in der Klasse erstellten Variable übergeben und genau das funktioniert nicht. Auszug aus dem Header: boost::asio::io_service io_service; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13)); tcp::socket socket(io_service); Die Variable io_service muss für die Socketerstellung den Klassen socket und acceptor übergeben werden. Genau das geht nicht. Weiß jemand einen ausweg? Gruß Happyman0815
-
Problem mit "std::cout << "........"; in Threads
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Ja, wenn ich weiter darüber nachdenke ist das auch gut so... Ja es lässt sich filtern und ich glaub auch nicht, dass die Daten mit einer Abmeldung gelöscht werden... Ich glaube Lycos hatte mal einen Bildschirmschoner herausgegeben, der bei inaktivität des Users irgendwelche Bilder von Spammails heruntergeladen hat. Die erhöhte Traffic sollte den Betreiben somit mehr Geld kosten und die Werbung damit uninteressant machen. Ich weiß jetzt leider nicht wie die Geschichte ausging aber das Projekt wurde meines wissens nach eingestellt. Werde ich beim nächsten mal beherzigen. Danke für die Wissensvermittlung in Sachen Threads Klotzkopp!!! Hat mich um einiges weiter gebracht! Gruß Happyman0815 -
Problem mit "std::cout << "........"; in Threads
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Hallo! mein kleines Übungsprojekt musste ein paar Tage ruhen... Das habe ich jetzt gemacht! Der Test läuft gerade. Bis jetzt kommen aber keine Fehler! Ok zum Glück habe ich asctime nur in einem Thread laufen, daher sollte das ok sein. Es gibt zu Laufzeit Fehler. Der Debugger hatte da nichts zu meckern. Wie gesagt bis jetzt läuft der Test fehlerfrei. Bis jetzt warte ich ein paar Sekunden bis ich die Sektions in der main() delete, so das die main() als letztes zu geht. Ich denke da muss ich die Handels alle mal abfragen und das davon abhängig machen. Das unschöne Projekt(den Quellcode werde ich jetzt nicht mehr schön machen :schlaf:) habe ich mal hochgeladen. Es ist zwar recht sinnlos aber es diente halt zu Übungszwecken. Erklärung: Damit das ganze funktioniert, sollte die Verknüpfung in Form eines Baum auf die .exe gelinkt sein. Die options.ini enthält eine Hompage die ausgelesen wird und den hexcode der am ende der HP dranhängt. Im Prinzip ist die bsp. HP ein Spambetreiber. Der Code dient der Abmeldung von Userkonten. Abmelden tut das Programm jedoch zurecht nicht. Die E-Mails hinter den Codes werden allerdings ausgelesen und abgespeichert. Es werden dafür zwei .txt Dateien im Ausführungsordner erstellt. PS: Auch ein kleiner Hieb in sachen Datensicherheit... Gruß Happyman0815 -
Problem mit "std::cout << "........"; in Threads
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Also die Deklarationder Kritischen Bereiche ist Global: //Kritische Bereiche für Thread Synchronisation (Global) CRITICAL_SECTION File_opening; CRITICAL_SECTION use_obj; CRITICAL_SECTION Speed; CRITICAL_SECTION Cout; In der main() werden diese initialisiert: //Initialisierung der kritischen Bereiche InitializeCriticalSection(&File_opening); InitializeCriticalSection(&use_obj); InitializeCriticalSection(&Speed); InitializeCriticalSection(&Cout); Dann werden die Threads aus der main() aufgerufen: hspeed = CreateThread( NULL,NULL,Speed_,NULL,0,&dwThreadID); hmenu = CreateThread( NULL,NULL,Menu ,NULL,0,&dwThreadID); for(i=0; i < 5 ;i++) { temp_me_bool[thread_count] = true; hThread[thread_count] = CreateThread( NULL,NULL,URLDownload,NULL,0,&dwThreadID); Sleep(10); thread_count++; } hausgabe = CreateThread( NULL,NULL,Ausgabe ,NULL,0,&dwThreadID); In diesen Threads gibt es wie gesagt Ausgaben. Diese werden mit den "CriticalSection" umschlossen. EnterCriticalSection(&Cout); cout << " Irgendwas " ; LeaveCriticalSection(&Cout); So und jetzt geb ich mal etwas Code aus dem Ausgabe Thread Preis: while(run) { //Sleep(50); time ( &rawtime ); timeinfo = localtime ( &rawtime ); time_ = asctime(timeinfo); for(i=0;i<24;i++){timestand[i] = time_[i];}; for(i=0; i < 7; i++) code_[i]='\0'; EnterCriticalSection(&use_obj); f.get_hex_code(code_); LeaveCriticalSection(&use_obj); EnterCriticalSection(&Speed); temp_zaehler = zaehler; temp_speed = speed; temp_funde = funde; LeaveCriticalSection(&Speed); // if( getch()=='a'){ EnterCriticalSection(&Cout); cout << "\r\rZaehler: " << temp_zaehler << " Funde: " << temp_funde <<" Time: " << (string)timestand << " Code: "<<code_[0] <<code_[1]<<code_[2]<<code_[3]<<code_[4]<<code_[5]<<code_[6] << " Speed: " << temp_speed << " pro min bei "<< thread_count << " Threads" << " \r\r" ; LeaveCriticalSection(&Cout); // }else Sleep(2000); } Das cout in der oberen "Endlosschleife" macht Probleme. Die globalen Variablen die ich ausgebe werden vorher in temporäre lokale Variablen gepackt. Das lesen der globalen Variablen ist auch mit Kritischen Bereichen abgesichert. Am Ende des Programms werden die kritischen Bereiche in der main() wieder deletet: DeleteCriticalSection(&File_opening); DeleteCriticalSection(&use_obj); DeleteCriticalSection(&Speed); DeleteCriticalSection(&Cout); Gruß Happyman0815 -
Hallo Leute! Wenn ich mehrere Threads habe die in die Console etwas ausgeben, muss ich diese absichern. Meine Variante: EnterCriticalSection(&Cout); cout << "irgendwas\n" ; LeaveCriticalSection(&Cout); so und trotz dieser Absicherung crasht das Programm nach einiger Zeit. Nehme ich das cout raus, läuft es stabil. Hat jemand eine Idee? Gruß Happyman0815
-
Hallo! Die Zuweisungen für den Dateinamen sind in dem Sinne sicher, dass Threads nur im 500 ms Takt erstellt und deletet werden können. Das sollte (auch wenn es schlecht programmiert ist) funktionieren. (und das Sleep konnte ich dank meinen pseudo Semaphoren jetzt auch raus nehmen ) Bei all den anderen Faktoren hast du wohl recht und ich muss mal schauen wie ich das mit einer vernünftigen Synchronisierung in den Griff bekomme. Es gibt denk ich mal auch Threads für C++ (nicht WinAPI)? Vielleicht sollte ich mich da mal einarbeiten damit ich später nicht von Windows abhängig bin. Danke schonmal für die Hilfe! Ich bin in sachen Threads (ist meine erste Threadprogrammierung) auf jedenfall schonmal um einiges weiter gekommen! Gruß Happyman0815
-
Hallo! es gibt eine globale Variable die hochgezählt wird: char dat[20] = {"C:/Temp/xx/DATxx@"}; for(i=0; dat[i] != '@'; i++); dat[i] = '\0'; if((char) verzeichnis_temp[0]!= 'z' && (char) verzeichnis_temp[1]!= 'z') { for(i=0; dat[i] != 'x'; i++); dat[i] = (char) verzeichnis_temp[0]; dat[i+1] = (char) verzeichnis_temp[1]; } for(i=0; dat[i] != 'x'; i++); //Hier bekommt jeder Thread eine eigene Datei: dat[i] = (char) (thread_counter/10) +48; dat[i+1] = (char) (thread_counter%10) +48; Ist derzeit noch "etwas" durcheinander. Der Thread Counter wird mit jedem erstellten Thread einen höher gezählt und die max. zweistellige Zahl dann in Char umgewandelt. Diese Werden dann dem Pfad hinzugefügt. Hab das so gemacht da man mit einem Menü Thread, dynamisch Threads hinzufügen und wieder entfernen kann. Klappt soweit ganz gut habs auch bis 100 Threads mal getestet. Uff ja ich hab mir schon gedacht das das zufall ist. Das Programm schmiert auch alle paar Stunden mal wieder ab. Die Wahrscheinlichkeit eines Absturz ist aber geringer geworden :bimei Hast du ein kleines Sample wie das vernünftig mit der Synchronisation klappt? (Ich brauch dringend die "URL to String" Lösung :old ) Gruß Happyman0815
-
Ich habe jetzt immer noch die Lösung mit den Dateien aber zumindest habe ich keine Abstürze mehr. Des Rätsels Lösung war: ifstream fin; fin.open(dat, ios::in); // <-- bei paralleler Ausführung in Threads gibt es Fehler Wenn eine Datei in einem anderen Thread parallel geöffnet wird, gibt es den Pointer Fehler! Ich setze dafür jetzt ein Semapohren System ein: while(!sema_file_open); sema_file_open=false; fin.open(dat, ios::in); sema_file_open=true; Damit funktioniert zumindest erstmal die Notlösung. Gruß Happyman0815
-
Threads Parameterübergabe
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Ok da hätte ich auch selbst drauf kommen können so gehts ja Danke! -
Threads Parameterübergabe
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Zusatzfrage: Wie kann ich einen Thread wieder auflösen? Also wenn ich diesen nicht mehr brauche? evtl. das Handle dynmisch erzeugen und dann wieder freigeben? Gruß Happyman0815 -
Threads Parameterübergabe
Happyman0815 antwortete auf Happyman0815's Thema in C++: Compiler, IDEs, APIs
Danke, funktioniert! Gruß Happyman0815 -
Hallo Leute! Kurze frage in sachen Threads: Ich habe einen Thread: DWORD WINAPI thread1( LPVOID); //Prototyp int main (...) { HANDLE hThread; DWORD dwThreadID; hThread = CreateThread( NULL,NULL,thread1,NULL,0,&dwThreadID); return 0; } //Thread: DWORD WINAPI thread1( LPVOID param ){ cout << "\nThread 1 ich lebe!\n"; ExitThread(0); return 0; } Wie kann ich diesem Thread einen Parameter übergeben? z.B. ein char. Und eine weitere Frage: Kann ich thread1 mit verschiedenen Parametern öfters ins leben rufen? So das z.B. thread1 zweimal läuft aber mit verschiedenen Parameter. Gruß Happyman0815
-
Hallo Leute! Ich komme mit meinem Problem kaum weiter. Den Quellcode möchte ich gerne so gestallten, dass man keine externen Programme benötigt, sondern alles auch auf anderen Windows Rechnern läuft. Ich grübel jetzt schon seit einigen Stunden über die URLOpenStream Function () nach aber komm irgendwie zu keiner Lösung Wenn einer etwas mehr wissen hat über Sockets, etc. als ich wäre es nett mir ein kleines Sample für mein Problem zu geben. :old Gruß Happyman0815
-
Hallo nochmal, Der Dateiname ist bei jedem Thread bereits unterschiedlich. (DAT1, .... ,DAT16) Ob diese nun den selben buffer verwenden weiß ich nicht. Könntest du mir ein kleines Sample geben zu folgender Funktion? URLOpenStream Function (...) Ich melde mich bis 20.00 Uhr ca. erstmal ab! Danke schonmal für die Tipps, in cURL muss ich micht später erstmal einarbeiten. Gruß Happyman0815
-
Hallo Leute! Ich bin auf der suche nach einer Funktion die mir den Seitenquelltext einer Homepage in einem String ablegt. Es Gibt die Funktion URLDownloadToFile(..); allerdings legt die mir den Quelltext in eine Datei ab. Meine Notlösung sieht derzeit so aus: //Laden des Quelltextes der Hompage "hp" in die Datei "DAT1" hr = URLDownloadToFile ( 0, hp, "DAT1", 0, 0 ); Sleep(100); //Öffnen der Datei "DAT1" um den Quelltext aus der Datei auslesen zu können ifstream fin("DAT1"); if (fin.is_open()) { //Speichern des Quelltextes in dem String "quellcode" fin.read(quellcode,1000); fin.close(); } else { cout << "Error opening file DAT1"; } Sleep(100); Da ich komplette Webseiten durchsuchen möchte laufen bei mir ca. 16 Threads in while(true) schleifen die diese operation ständig ausführen. Da ich mit so vielen Dateien arbeitet kommt es regelmäßig zu _CrtIsValidHeapPointer Fehlern. Ich muss dringend diese Notlösung loswerden um endlich nicht mehr mit Dateien hantieren zu müssen!!!! Ich hoffe einer von euch weiß einen Rat Gruß :new Happyman0815 :new