TheMaister Skrevet 7. september 2011 Del Skrevet 7. september 2011 (endret) sleep(0); // thread yield :\ Dette hjelper ikke på 100% CPU-bruk. Er som regel en form for blocking synkronisering man kan vente på. VBlank, events, etc. Sleeping er aller siste utvei. sleep() i Unix er i sekunder. Muligens usleep() eller nanosleep() er mer nyttig. Endret 7. september 2011 av TheMaister Lenke til kommentar
GeirGrusom Skrevet 8. september 2011 Del Skrevet 8. september 2011 sleep(0); // thread yield :\ Dette hjelper ikke på 100% CPU-bruk. Er som regel en form for blocking synkronisering man kan vente på. VBlank, events, etc. Sleeping er aller siste utvei. Ihvertfall Sleep under Windows har denne kjekke saken: A value of zero causes the thread to relinquish the remainder of its time slice to any other thread that is ready to run. If there are no other threads ready to run, the function returns immediately, and the thread continues execution. Som er akkurat det som er interessant. Hvis det er lite å gjøre, for eksempel en tom scene, så vil CPU-bruken falle til 0%. Hvis sleep ikke gjør dette under Linux, så kan det være lurt å bruke sched_yield istedet. Lenke til kommentar
Lycantrophe Skrevet 8. september 2011 Del Skrevet 8. september 2011 Jeg kan prøve med sleep(0), men sched_yield og det å flytte tegnemetoden (slik at jeg ikke får 1000vis av fps) reduserte effektivt CPU-bruken til ~8% eller så. Lenke til kommentar
Hvem Skrevet 29. september 2011 Del Skrevet 29. september 2011 Dette er egentlig et C-spørsmål, men tror ikke jeg blir slaktet for å spørre her Har gått gjennom litt tutorials nå, men sitter fast her: int main(void) { int num; printf("Enter any number\n"); scanf("%d", &num); printf("%d is your number", &num); getch(); } Uansett hvilket tall jeg setter inn blir resultatet: "2686788 is your number". Ser ikke selv hvor problemet ligger og håer noen kan gi meg et svar Lenke til kommentar
ze5400 Skrevet 29. september 2011 Del Skrevet 29. september 2011 (endret) Ta en ekstra titt på denne linjen printf("%d is your number", &num); EDIT: Du tar adressen til num ved å sette & foran. Du ønsker naturlig nok ikke å gjøre dette når du skal hente ut inneholdet i num, snarere enn å fortelle en annen funksjon hvor den kan finne num. Endret 29. september 2011 av ze5400 2 Lenke til kommentar
Cemi Skrevet 11. november 2011 Del Skrevet 11. november 2011 Jeg har en header fil som brukes til sockets vha. SFML. Dersom jeg endrer rekkefølgen på deklerasjonene, så slutter alt å fungere. Hvorfor? Versjon 1 fungerer, versjon 2 kjører uten feil men kan ikke sende eller motta pakker, versjon 3 gir en Memory Access reading violation. Det eneste jeg gjør er å flytte på linja: sf::SocketTCP Client; Koden er veldig rotete beklager det, fant denne feilen når jeg skulle rydde i koden, og endra på rekkefølgen i fila og fjernet noen variabler jeg kun brukte for å finne ut av ting, og plutselig fungerte ingenting lengre. Har også inkludert en versjon 4, som er min "oppryddede" versjon av koden, dersom det skulle være interessant å se hva jeg faktisk bruker i filen. Fungerer: //============================================================================= #ifndef _CCLIENT_H_ #define _CCLIENT_H_ #include <SFML/Network.hpp> #include <string> #include "CEntity.h" //============================================================================= class CClient{ public: struct Playern { int PID; int X; int Y; int Dead; }; // Packet content int packetID; int entityID; int playerID; int command; // --------------- sf::SelectorTCP selector; sf::SocketTCP Socket; unsigned int NbSockets; CClient(); int targX; int targY; void Connect(); void RunClient(); void setMyID(int id); int getMyID(); void SendPacket(int packetID, int entityID, int playerID, int command); void SendPacket(int packetID, int entityID, int playerID, int command, int tarX, int tarY); sf::Packet ReSend; std::string ty; sf::IPAddress ServerAddress; std::string inString; sf::Packet ToSend; std::string s; sf::Packet onConnect; static int myID; bool connected; Playern P; sf::SocketTCP Client; public: }; //============================================================================= #endif Fungerer ikke, gir ingen error, bare kan ikke sende pakker: //============================================================================= #ifndef _CCLIENT_H_ #define _CCLIENT_H_ #include <SFML/Network.hpp> #include <string> #include "CEntity.h" //============================================================================= class CClient{ public: struct Playern { int PID; int X; int Y; int Dead; }; // Packet content int packetID; int entityID; int playerID; int command; // --------------- sf::SelectorTCP selector; sf::SocketTCP Socket; unsigned int NbSockets; CClient(); int targX; int targY; void Connect(); void RunClient(); void setMyID(int id); int getMyID(); void SendPacket(int packetID, int entityID, int playerID, int command); void SendPacket(int packetID, int entityID, int playerID, int command, int tarX, int tarY); sf::Packet ReSend; std::string ty; sf::IPAddress ServerAddress; std::string inString; sf::Packet ToSend; std::string s; sf::Packet onConnect; static int myID; bool connected; sf::SocketTCP Client; Playern P; public: }; //============================================================================= #endif Memory access reading violation: //============================================================================= #ifndef _CCLIENT_H_ #define _CCLIENT_H_ #include <SFML/Network.hpp> #include <string> #include "CEntity.h" //============================================================================= class CClient{ public: struct Playern { int PID; int X; int Y; int Dead; }; // Packet content int packetID; int entityID; int playerID; int command; // --------------- sf::SelectorTCP selector; sf::SocketTCP Socket; unsigned int NbSockets; CClient(); int targX; int targY; sf::SocketTCP Client; void Connect(); void RunClient(); void setMyID(int id); int getMyID(); void SendPacket(int packetID, int entityID, int playerID, int command); void SendPacket(int packetID, int entityID, int playerID, int command, int tarX, int tarY); sf::Packet ReSend; std::string ty; sf::IPAddress ServerAddress; std::string inString; sf::Packet ToSend; std::string s; sf::Packet onConnect; static int myID; bool connected; Playern P; public: }; //============================================================================= #endif Versjon 4, oppryddet med kommentarer, gir memory access reading violation: //============================================================================= #ifndef _CCLIENT_H_ #define _CCLIENT_H_ #include <SFML/Network.hpp> #include <string> #include "CEntity.h" //============================================================================= class CClient{ public: // Packet content int packetID; // What type of packet. int entityID; // EntityID, currently unused. int playerID; // PlayerID, which player the command is for. int command; // What command was issued. Move left, cast spell, etc. sf::SelectorTCP selector; // Selector, used to add a timeout on the recieve to not cause blocking. unsigned int NbSockets; // Used by the Selector. CClient(); // Constructor. // Projectile packets only. int targX; // Target X coordinate for projectiles. int targY; // Target Y coordinate for projectiles. // --------------- sf::SocketTCP Client; // The socket used to communicate. void RunClient(); // Runs in the gameLoop, gets incoming packets. // Send packet function for normal commands. void SendPacket(int packetID, int entityID, int playerID, int command); // Send projectile packet function. void SendPacket(int packetID, int entityID, int playerID, int command, int tarX, int tarY); sf::Packet ReSend; // Packet used when receiving packets. sf::IPAddress ServerAddress; // IP Address to connect to. sf::Packet ToSend; // Packet used when sending packets. void Connect(); // Connect function. Sets up connection. sf::Packet onConnect; // Packet used when receiving info on connect. static int myID; // ID of your character. bool connected; // Connected to the server if true. private: }; //============================================================================= #endif Lenke til kommentar
Gjest Slettet+9871234 Skrevet 11. november 2011 Del Skrevet 11. november 2011 Noen som kan svare: Embarcadero og Drupal. Noen som bruker dette? Lenke til kommentar
Toffypops Skrevet 27. desember 2011 Del Skrevet 27. desember 2011 Hei. Jeg har lyst å lære C++ men jeg er helt grønn...skikkelig grønn. Jeg har minimal erfaring med ting som HTML og LUA, men jeg ønsker å finne ut om noen vet om en bok som kan lære meg C++ i nær babyspråk slik at jeg kan forstå meningen med tingene jeg lærer. De fleste programmeringsbøkene jeg har sett kaster deg rett inn i programmeringa, uten å egentlig f.eks forklare hva en array er eller hva den gjør, eller hvordan den skal kunne kombineres i programeringen. Finnes det noen skikkelig bra nybegynnerbøker der ute for folk som aldri har rørt programmering?..eller artikkler? send meg gjerne en e-post på boolsen @online.no hvis dere vet om noe. på forhånd takk. mvh Bård Lenke til kommentar
GeirGrusom Skrevet 27. desember 2011 Del Skrevet 27. desember 2011 Ofte blir Accelerated C++ anbefalt på dette forumet, men dette begynner å bli en ganske gammel bok (2000). I og med at det nå er publisert en ny revisjon av C++ (C++11) så kan det være en idé å lete etter noe nyere. Lenke til kommentar
Leif.ross Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Lurer på hvorfor denne kodesnutten printer ut. You entered: this You entered: is You entered: a You entered: test! Istedenfor. You entered: this is a test! while(exit==0) { cin>>String; cout<<"you entered: "<<String<<endl; if(String=="/exit") {exit = 1;} } Lenke til kommentar
zotbar1234 Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Lurer på hvorfor denne kodesnutten printer ut. (...) Istedenfor. (...) Fordi du ikke poster det minste komplette eksempelet som illustrerer problemet. Spøk til side[1], fordi det er slik formatted I/O virker. ' ' virker som separator for det som er std::string. Hvis du vil plukke en og en linje av gangen, bruk std::getline(). Hvis du vil lese inn ett og ett ord av gangen, bruk gjerne operator>>(), men da med de begrensningene som gjelder. [1] Antagelsen her er at String har typen std::string og at du skriver "this is a test! /exit" før du trykker på hva som nå enn er "enter"-tasten i terminalen din. Lenke til kommentar
Leif.ross Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Lurer på hvorfor denne kodesnutten printer ut. (...) Istedenfor. (...) Fordi du ikke poster det minste komplette eksempelet som illustrerer problemet. Spøk til side[1], fordi det er slik formatted I/O virker. ' ' virker som separator for det som er std::string. Hvis du vil plukke en og en linje av gangen, bruk std::getline(). Hvis du vil lese inn ett og ett ord av gangen, bruk gjerne operator>>(), men da med de begrensningene som gjelder. [1] Antagelsen her er at String har typen std::string og at du skriver "this is a test! /exit" før du trykker på hva som nå enn er "enter"-tasten i terminalen din. #include <iostream> #include <string.h> #include <string> #include <map> using namespace std; int main() { //typedef std::map <std::string, int> MapType; // MapType data; int exit = 0; std::string String; cout<<"hello"<<endl; while(exit==0) { std::getline(String); cout<<"you entered: "<<String<<endl; if(String=="/exit") {exit = 1;} } return 0; } Er bare et program jeg skrev for å lære hvordan strings fungerer i c++ da jeg er vant med en helt annen syntax på d! Den skal bare gjenta det jeg skriver, og så hvis jeg skriver /exit skal den stoppe programmet! Lenke til kommentar
zotbar1234 Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Er bare et program jeg skrev for å lære hvordan strings fungerer i c++ da jeg er vant med en helt annen syntax på d! Den skal bare gjenta det jeg skriver, og så hvis jeg skriver /exit skal den stoppe programmet! Ja, og forklaringen på min gjetting stemmer med virkeligheten. En noe forenklet variant er da: #include <iostream> #include <string> int main() { std::string String; std::cout<<"hello\n"; while ( std::getline(std::cin, String) ) { if ( String == "/exit" ) break ; std::cout<< "you entered: " << String << "\n"; } return 0; } Lenke til kommentar
Leif.ross Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Jess, tusen takk, nå funker det! Lenke til kommentar
zotbar1234 Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Jess, tusen takk, nå funker det! Bonus/forståelsesspørsmål -- hvorfor tester man returverdien fra std::getline() i while? Lenke til kommentar
Leif.ross Skrevet 28. desember 2011 Del Skrevet 28. desember 2011 Jess, tusen takk, nå funker det! Bonus/forståelsesspørsmål -- hvorfor tester man returverdien fra std::getline() i while? Man tester den i while for det er en bedre måte å kjøre programmet flere ganger enn goto? Er litt stuck igjen, trenger en funksjon som tilsvarer lua/e2s Array = String:explode(String) funksjon. Altså en funksjon som splitter en string til en array basert på en seperasjons string. eks: S = "Dette er en test" kjørt gjennom funksjonen Array = S:explode(" ") blir til Array(Dette,er,en,test). Har prøvd strtok, men den trenger en char string og får den ikke helt til å fungere.. #include <iostream> #include <string.h> #include <string> #include <map> using namespace std; int main() { typedef map <string, int> MapType; MapType data; char * explode; int i; int exit = 0; string String; char * String2; cout<<"hello"<<endl; while(exit==0) { //aktiverer den første stringen getline(cin,String); //aktiverer samme greia, men som en char string cin.getline(String2,String.length()); //returnerer den første stringen cout<<"you entered: "<<String<<endl; //kaboom, splitter stringen til en array basert på hvert ord, denne funksjonen funker ikke helt.. explode = strtok(String2," "); //looper igjennom arrayen fra forrige funksjon for å teste om det funker for(i=0; i<strlen(explode); i++) { cout<<explode[i]<<endl; } if(String=="/exit") {exit = 1;} } return 0; } Lenke til kommentar
zotbar1234 Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 Bonus/forståelsesspørsmål -- hvorfor tester man returverdien fra std::getline() i while? Man tester den i while for det er en bedre måte å kjøre programmet flere ganger enn goto? Nei (testen ville ha vært den samme med goto). Er litt stuck igjen, trenger en funksjon som tilsvarer lua/e2s Array = String:explode(String) funksjon. Altså en funksjon som splitter en string til en array basert på en seperasjons string. boost::split() ? Evt. mekke en enkel variant av den selv basert på std::string::find_first_of() og venner. Har prøvd strtok, men den trenger en char string og får den ikke helt til å fungere.. strtok er rimelig ond. Verdisemantikk er ganske mye mer behagelig å jobbe med. Et par rettelser: using namespace std; Ikke i et globalt navnerom. while(exit==0) { Det er tøysete bruk av statusvariable. Du har break til rådighet. //aktiverer den første stringen getline(cin,String); ... og tøysete kommentarer kan man med hell droppe. //aktiverer samme greia, men som en char string cin.getline(String2,String.length()); Dumt å ikke teste hvorvidt innlesingen lyktes. //returnerer den første stringen cout<<"you entered: "<<String<<endl; //kaboom, splitter stringen til en array basert på hvert ord, denne funksjonen funker ikke helt.. explode = strtok(String2," "); Det er ikke meningen man skal bruke strtok() på std::string (*Mulig* det vil fungere med strtok på &String[0], men det er helt klart Feil Måte[tm] å angripe problemet på). if(String=="/exit") {exit = 1;} Dette er det første du burde gjøre i løkken. Samt bytte exit med break. Lenke til kommentar
Leif.ross Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 (endret) Takker! Skrev en funksjon via pushback, men det er en ting til jeg lurer på når det kommer til c++ syntax, hvorfor kan jeg ikke gjøre dette? words[words.size()+1] = explode[i]; Både "words" og "explode" er vector<string>, og det skjer inne i en for loop der "i" er giveren! ser at den blir outranged, men er det noen måte å bypasse dette problemet på? edit: hehe, dumme meg, løste problemet med å bruke push_back Endret 29. desember 2011 av Leif.ross Lenke til kommentar
Thitorkin Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 (endret) Kan noen hjelpe meg å forstå hvorfor eg ikke kan bruke dette programmet? Eg tror det har noe med ReadLine å gjøre...Om det i det hele tatt går ann å bruke Eg kunne bare WriteLine og tenkte at det kunne brukes :S #include "stdafx.h" #include "iostream" #include <limits> #include <fstream> using namespace System; using namespace std; void pause() { cout << "Press <ENTER> to continue . . ."; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } int main(array<System::String ^> ^args) { double input; Console::WriteLine(L"Hello World!\n"); Console::WriteLine(L"Please enter your basic name that we will base the rest fo the names on: "); Console::ReadLine(input); ofstream makefile; makefile.open("accountnames.simsnames"); makefile << input; pause(); return 0; } Fikset den, men får bare ut random nummer istede for navnet!! hjelp Endret 29. desember 2011 av Thitorkin Lenke til kommentar
Leif.ross Skrevet 29. desember 2011 Del Skrevet 29. desember 2011 Har et siste spørsmål, får feilen "vector subscript out of range" på denne snutten. Kan vær jeg ikke ser det fordi jeg er utrolig sliten, men flere øyne på saken kan kanskje hjelpe også! srand(time(0)); for(b=0; b<length[trigger]; b++) { randint = (rand()%length[trigger])+1; if(randint<(length[trigger]/2)) { sentence[b]=context[trigger][b]; }else{ randint2 = (rand()%words.size())+1; sentence[b]=words[randint2]; } } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå