Da li netko zna kako iz koda mogu zaustaviti thread koji sam stvorio? Pokusao sam sa destruktorom, ali dobijam gresku "terminate called without an active exception".
P.S. koristim standardni library za threadove
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.705.093
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
thread se ne moze zaustaviti, mozes i trebas joinati sa njim ili ga detachati...
ako ga hoces zaustaviti thread funkciji posalji referencu na atomic<bool> koju ovaj provjerava pa da zna kada treba stati, a ti ga postavis u pozivajucoj dretvi kada hoces da kreiranu zaustavis...
Pomoći thread::native_handle možeš dobiti handle koji potom možeš proslijediti nekom OS API-u koji implementira takvu funkcionalnost.
Na windowsima ti je to TerminateThread, a na Linuxu pthread_cancel (??) ili tgkill.
Naravno, samo zato što možeš takvo nešto izvesti ne znači da je to baš i pametno, ovisno o prirodi threada (možeš dobiti kojekakve leakove ako thread alocira nekakve resurse za sebe, ili završiti u nekakvom međustanju u kojem je thread djelomično obavio posao).
killanje threada na neekoperativni nacin je sh1t programiranje.
BTW boost ima ovo:
http://stackoverflow.com/questions/10531810/how-to-stop-interrupt-a-boostthread
sto je vise manje ok, iako naravno je banana ako funkcija pojede exception bez da prekine izvodenje :)
thread se ne moze zaustaviti, mozes i trebas joinati sa njim ili ga detachati...
ako ga hoces zaustaviti thread funkciji posalji referencu na atomic<bool> koju ovaj provjerava pa da zna kada treba stati, a ti ga postavis u pozivajucoj dretvi kada hoces da kreiranu zaustavis...
Uz ovo sve nemoj koristiti nekakve "blocking" pozive funkcija, jer taj thread mora jednom završiti taj poziv i provjeriti stanje te varijable.
Npr. čitanje mrežnog socketa nije pametno staviti kao blocking i strpati u thread.
I također drži vrijeme između provjera te varijable u nekakvom razumnom rasponu. Ako je u pitanju gašenje aplikacije/restart servisa, tada je to par sekundi.
Je li ikako moguće napraviti program koji će brojati od koliko se brojeva sastoji skup brojeva koji se ponavljaju u određenom nizu
tipa niz: 1|0|1|2|3|0|9|1|0|1|2|3|0|9|1|0|1|2|3|0|9|
i sada se tu ponavlja skup 1|0|1|2|3|0|9| koji se sastoji od 7 brojeva
Fora je u tome što niz sigurno ima neko ponavljanje, tj. uvijek ide neki uzorak
kako ispisati red iz txt datoteke?
npr imamo tekst u txt datoteci i trebamo ispisat jedan red teksta
...tekst... <- sad treba ovaj red ispisat
...tekst...
...tekst...
fscanf(datoteka,"%s",redakTeksta);
Je li ikako moguće napraviti program koji će brojati od koliko se brojeva sastoji skup brojeva koji se ponavljaju u određenom nizu
tipa niz: 1|0|1|2|3|0|9|1|0|1|2|3|0|9|1|0|1|2|3|0|9|
i sada se tu ponavlja skup 1|0|1|2|3|0|9| koji se sastoji od 7 brojeva
Fora je u tome što niz sigurno ima neko ponavljanje, tj. uvijek ide neki uzorak
moguce je :)
sad reci sto te tocno muci, sumnjam da ce ti netko tu rjesavati svaki zadatak koji postavis :D
kako ispisati red iz txt datoteke?
npr imamo tekst u txt datoteci i trebamo ispisat jedan red teksta
...tekst... <- sad treba ovaj red ispisat
...tekst...
...tekst...
Google: fstream getline
Zašto se ; ne mora staviti nakon nikojeg para {}, osim kod definicije structa?
Npr ovo je ispravno:
struct s { };
... a ovo nije:
struct s { } // bez semicolona
... a ovo pak jest:
void f( ) { } // opet bez
... a ovo sve radi identično i ovako:
void f() { while (1) { } }
... a i ovako:
void f() { ;;;while (1) { };;; };;;
Očekujem da je odgovor "pa to ti je tako po standardu", samo me zanima postoji li tu neka logika koja mi je promakla.
Je li ikako moguće napraviti program koji će brojati od koliko se brojeva sastoji skup brojeva koji se ponavljaju u određenom nizu
tipa niz: 1|0|1|2|3|0|9|1|0|1|2|3|0|9|1|0|1|2|3|0|9|
i sada se tu ponavlja skup 1|0|1|2|3|0|9| koji se sastoji od 7 brojeva
Fora je u tome što niz sigurno ima neko ponavljanje, tj. uvijek ide neki uzorak
moguce je :)
sad reci sto te tocno muci, sumnjam da ce ti netko tu rjesavati svaki zadatak koji postavis :D
napokon se netko odazvao :)
Ma c++ ne znam ni 1%, znam tek while, for, if, scanf, printf, funkcije(vjerujem da znam samo najosnovnije), te jednodimenzionalne nizove
sutra ću "naučiti" string(učimo c++ na informatici) pa ću onda nešto probati iskombinirati
A fora je u tome što sam došao na jednu ideju u vezi matematike pa bi mi takav program uštedio sate računanja
Proučavajući malo string shvatio sam što mogu napraviti ;)
Sutra javim ako budem imao problema
Zašto se ; ne mora staviti nakon nikojeg para {}, osim kod definicije structa?
Zato što možeš imati i:
struct tocka
{
int x;
int y;
};
i:
struct tocka
{
int x;
int y;
} t1, t2;
Odnosno kod definicije strukturnog tipa odmah možeš i deklarirati varijablu tog istog tipa. Možeš čak i izostaviti tag pa imati:
struct
{
int x;
int y;
} t1, t2;
btw ako znate engleski(tko ne zna ? ) a zelite nauciti programirati koristeci cpp
http://isocpp.org/blog/2013/11/learn-how-to-program...-with-c-kate-gregory
Zašto se ; ne mora staviti nakon nikojeg para {}, osim kod definicije structa?
Očekujem da je odgovor "pa to ti je tako po standardu", samo me zanima postoji li tu neka logika koja mi je promakla.
Također mora ići i iza enuma, iza unije, a mora ići i iza definicije klase.
Razlog se vuče još iz C-a, a C++ je jednostavno preuzeo pravila igre.
Postoji logika iza toga, no moje objašnjenje će možda biti neprecizno u odnosu na standard.
Nikako da nabavim tu knjižurinu, a K&R mi nije sada tu.
Ako pogledaš što je nabrojano - klase, unije, enumi, strukture, svaki od njih može se koristiti kod deklariranja varijable.
A pošto kod deklaracije (npr. int xyz=4;) koristiš ; na kraju, tada trebaš i kod njih.
Narodski rečeno - { i } kod C i C++ jezika označavaju nekakvu povezanu cjelinu, svejedno radi li se o kodu ili o podacima.
Ide li ; iza toga ovisi o tome može li se ta cjelina koristiti kod nekakve deklaracije.
Što se tiče gomile ;;;; koje si naveo, pod određenim uvjetima ubačen ; u kodu, koji naizgled nema funkciju ali je ispravan po sintaksi, kompajler može prevesti u NOP direktivu procesoru.
Dakle tipfeler i=i+1;; može prevesti kao inkrement nekakve varijable na nekakvoj memorijskoj lokaciji i NOP iza toga.
A da ti zagorčam život i pošto je moje objašnjenje bilo neprecizno - void f() { while (1) { } } prolazi bez ;, no void f() { do{}while (1); } ima ;
Vjerujem da tu sada već možeš zaključiti koji je razlog.
Zašto se ; ne mora staviti nakon nikojeg para {}, osim kod definicije structa?
Očekujem da je odgovor "pa to ti je tako po standardu", samo me zanima postoji li tu neka logika koja mi je promakla.
Također mora ići i iza enuma, iza unije, a mora ići i iza definicije klase.
Razlog se vuče još iz C-a, a C++ je jednostavno preuzeo pravila igre.
Postoji logika iza toga, no moje objašnjenje će možda biti neprecizno u odnosu na standard.
Nikako da nabavim tu knjižurinu, a K&R mi nije sada tu.
Ako pogledaš što je nabrojano - klase, unije, enumi, strukture, svaki od njih može se koristiti kod deklariranja varijable.
A pošto kod deklaracije (npr. int xyz=4;) koristiš ; na kraju, tada trebaš i kod njih.
Narodski rečeno - { i } kod C i C++ jezika označavaju nekakvu povezanu cjelinu, svejedno radi li se o kodu ili o podacima.
Ide li ; iza toga ovisi o tome može li se ta cjelina koristiti kod nekakve deklaracije.
Što se tiče gomile ;;;; koje si naveo, pod određenim uvjetima ubačen ; u kodu, koji naizgled nema funkciju ali je ispravan po sintaksi, kompajler može prevesti u NOP direktivu procesoru.
Dakle tipfeler i=i+1;; može prevesti kao inkrement nekakve varijable na nekakvoj memorijskoj lokaciji i NOP iza toga.
A da ti zagorčam život i pošto je moje objašnjenje bilo neprecizno - void f() { while (1) { } } prolazi bez ;, no void f() { do{}while (1); } ima ;
Vjerujem da tu sada već možeš zaključiti koji je razlog.
ovo za nop je glupost...
mislim teoretski kompajler moze dodati 13 mop instrukcija u tvoj program kad mu puhne ali se to ne dogada.
Riješio sam algoritam za svoj program ;)
Napisat ću ga ovdje ako slučajno nekome zatreba
Ovako:
za početak
npr. 110110110
x=3(tri se broja nalazi u uzorku)
e sad
znači x (početni je 1), provjeri prvi broj i sljedeći broj uvećan za x(npr. sljedeći broj je 2, jer je 1+1=2) ako je tako sljedećih 47 puta(jer do toliko brojeva idem) onda je 1 broj u uzorku, ali u gornjem slučaju nije
onda x je 2, tako da će uspoređivati prvi i treći broj, drugi i 4. itd itd, ako nije ni tako onda ide na x=3
itd itd
Riješio sam algoritam za svoj program ;)
Napisat ću ga ovdje ako slučajno nekome zatreba
Ovako:
za početak
npr. 110110110
x=3(tri se broja nalazi u uzorku)
e sad
znači x (početni je 1), provjeri prvi broj i sljedeći broj uvećan za x(npr. sljedeći broj je 2, jer je 1+1=2) ako je tako sljedećih 47 puta(jer do toliko brojeva idem) onda je 1 broj u uzorku, ali u gornjem slučaju nije
onda x je 2, tako da će uspoređivati prvi i treći broj, drugi i 4. itd itd, ako nije ni tako onda ide na x=3
itd itd
Ako sam te dobro skužio da tražiš template koji se ponavlja u nizu, zašto onda 47 članova niza, pošto je 47 prim broj, template može biti samo 1, ili nije bitno da na kraju niza bude nepotpun template.
...
Ako sam te dobro skužio da tražiš template koji se ponavlja u nizu, zašto onda 47 članova niza, pošto je 47 prim broj, template može biti samo 1, ili nije bitno da na kraju niza bude nepotpun template.
Ne
Gledaj, ja unosim 47 brojeva koji idu po određenom "uzorku" koji je manje od 23 znamenke
npr.(ovdje je sad 45 brojeva, znam ja zašto)
11011011011011011011011011011011011011110110
i tu sad imam niz od 45 brojeva i meni program izbaci 3, jer se tri broja ponavljaju u uzorku koji je 110
...
Ako sam te dobro skužio da tražiš template koji se ponavlja u nizu, zašto onda 47 članova niza, pošto je 47 prim broj, template može biti samo 1, ili nije bitno da na kraju niza bude nepotpun template.
Ne
Gledaj, ja unosim 47 brojeva koji idu po određenom "uzorku" koji je manje od 23 znamenke
npr.(ovdje je sad 45 brojeva, znam ja zašto)
11011011011011011011011011011011011011110110
i tu sad imam niz od 45 brojeva i meni program izbaci 3, jer se tri broja ponavljaju u uzorku koji je 110
OK, a kad uneseš 47 brojeva, kako se onda ponavljaju, nego ako uzmemo ovaj uzorak da na kraju stoji 11 nadodan na tvoj niz od 45
...
Ako sam te dobro skužio da tražiš template koji se ponavlja u nizu, zašto onda 47 članova niza, pošto je 47 prim broj, template može biti samo 1, ili nije bitno da na kraju niza bude nepotpun template.
Ne
Gledaj, ja unosim 47 brojeva koji idu po određenom "uzorku" koji je manje od 23 znamenke
npr.(ovdje je sad 45 brojeva, znam ja zašto)
11011011011011011011011011011011011011110110
i tu sad imam niz od 45 brojeva i meni program izbaci 3, jer se tri broja ponavljaju u uzorku koji je 110
OK, a kad uneseš 47 brojeva, kako se onda ponavljaju, nego ako uzmemo ovaj uzorak da na kraju stoji 11 nadodan na tvoj niz od 45
zato svaki puta kada provjeravam koliki mi je broj u ponavljanju(u gornjem slučaju 3) uzmem ostatak(47%3), taj ostatak oduzmem od 47 i onda mi novi niz iznosi 45
valja? :)
Mogu li ikako s c++om računati brojeve preko ovo "ograničenja kojeg imam za sada?
Dajte mi prijedlog kvalitetnog OOP štiva.
I također neko dobro štivo koje detaljno obrađuje temelje proceduralnog programiranja (nizove, funkcije, stringove, pa i structove...)
Čemu služi tema za literaturu?
Dobar dan, planiram se ovo ljeto malo temeljitije baviti programiranjem i "tražim" jezik koji bi mi bio prikladan pa me zanima vaše mišljenje, dali je to C++?
Planiram praviti aplikacije isključivo namjenjene izvođenju na mobilnim platformama (Android, iOS, možda WP)
Za sada sam učio C i C#, u C# sam pravio nekoliko projekata, sviđa mi se jednostavnost jezika ali ne i peformanse, također mi ne paše ni manjak opcija i tutoriala za portanje na Android/iOS...
Tako da se sad mislim između Jave i C++-a, vidim da java ima jako loše peformanse pod windowsima što bi mi možda moglo zasmetati, ali neki govore da je "zgodnija" za izradu mobilnih aplikacija.
Još jednu stvar da napomenem, planiram upisati fakultet na kojem se uči C++, tako da mi tu predznanje možda dobro došlo, koje su vaše preporuke?
1 | C++ |
---|---|
2 | Java |
0 | Nešto treće? |
Zašto mi se ne sprema u normalnom obliku ovo iz datoteke inText.txt u outText.txt?
Dobivam ovaj rezultat:
Rectangle:
Length = -9.3e+061, width = -9.3e+061, area = 8.6e+123, parameter = -3.7e+062
Circle:
Radius = -9.3e+061, area = 2.7e+124, circuference = -5.8e+062
Name: , age: -858993460
Letter: Ě
Ako je datoteka inText slijedećeg sadržaja:
10.20 5.35
15.6
Randy Gill 31
A
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
ifstream inFile;
ofstream outFile;
double length, width, radius;
int age;
string name;
char letter;
inFile.open("inText.txt");
outFile.open("outText.txt");
cout << "File open!" << endl;
inFile >> length >> width;
inFile >> radius;
inFile >> age;
inFile >> name;
inFile >> letter;
outFile << setprecision(2);
outFile << "Rectangle: " << endl;
outFile << "Length = " << length << ", width = " << width << ", area = " << length * width << ", parameter = " << 2*length + 2*width << endl;
outFile << endl;
outFile << "Circle: " << endl;
outFile << "Radius = " << radius << ", area = " << radius * radius * 3.14 << ", circuference = " << 2*radius*3.14 << endl;
outFile << "Name: " << name << ", age: " << age << endl;
outFile << "Letter: " << letter << endl;
inFile.close();
outFile.close();
cout << "File closed." << endl;
return 0;
}
Pozdrav, zamolio bi ako netko zna da mi pomogne, trebalo bi mi napisat funkciju za ucitavanje svih elemenata varijable B iz int*B=new int[m]; i poziv te funkcije, pa ako netko zna bio bih zahvalan jer moje rjesenje je krivo...
Dobar dan, planiram se ovo ljeto malo temeljitije baviti programiranjem i "tražim" jezik koji bi mi bio prikladan pa me zanima vaše mišljenje, dali je to C++?
Planiram praviti aplikacije isključivo namjenjene izvođenju na mobilnim platformama (Android, iOS, možda WP)
Za sada sam učio C i C#, u C# sam pravio nekoliko projekata, sviđa mi se jednostavnost jezika ali ne i peformanse, također mi ne paše ni manjak opcija i tutoriala za portanje na Android/iOS...
Tako da se sad mislim između Jave i C++-a, vidim da java ima jako loše peformanse pod windowsima što bi mi možda moglo zasmetati, ali neki govore da je "zgodnija" za izradu mobilnih aplikacija.
Još jednu stvar da napomenem, planiram upisati fakultet na kojem se uči C++, tako da mi tu predznanje možda dobro došlo, koje su vaše preporuke?
Uzmi zadnji C++ Builder (XE5) i bez problema i s lakoćom ćeš raditi mobilne aplikacije (Android, IOS). A po potrebi ih direktno compiliraš i za Win i OSX bez ikakve promjene koda.
Primjer aplikacije za IOS:
Pozdrav, zamolio bi ako netko zna da mi pomogne, trebalo bi mi napisat funkciju za ucitavanje svih elemenata varijable B iz int*B=new int[m]; i poziv te funkcije, pa ako netko zna bio bih zahvalan jer moje rjesenje je krivo...
Koliko vidim, tvoje rješenje je nepostojeće. Ukoliko misliš da ti netko pomogne postavi code koji si do sada napravio i jasno objasni koji dio ti je problem.
Zašto mi se ne sprema u normalnom obliku ovo iz datoteke inText.txt u outText.txt?
Dobivam ovaj rezultat:
Rectangle:
Length = -9.3e+061, width = -9.3e+061, area = 8.6e+123, parameter = -3.7e+062
Circle:
Radius = -9.3e+061, area = 2.7e+124, circuference = -5.8e+062
Name: , age: -858993460
Letter: Ě
Ako je datoteka inText slijedećeg sadržaja:
10.20 5.35
15.6
Randy Gill 31
A
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
ifstream inFile;
ofstream outFile;
double length, width, radius;
int age;
string name;
char letter;
inFile.open("inText.txt");
outFile.open("outText.txt");
cout << "File open!" << endl;
inFile >> length >> width;
inFile >> radius;
inFile >> age;
inFile >> name;
inFile >> letter;
outFile << setprecision(2);
outFile << "Rectangle: " << endl;
outFile << "Length = " << length << ", width = " << width << ", area = " << length * width << ", parameter = " << 2*length + 2*width << endl;
outFile << endl;
outFile << "Circle: " << endl;
outFile << "Radius = " << radius << ", area = " << radius * radius * 3.14 << ", circuference = " << 2*radius*3.14 << endl;
outFile << "Name: " << name << ", age: " << age << endl;
outFile << "Letter: " << letter << endl;
inFile.close();
outFile.close();
cout << "File closed." << endl;
return 0;
}
1. Pogledaj gdje ti je out datoteka, pa tu stavi in datoteku
2. In datoteku pravilno popuni
10.20 5.35
15.6
31
RandyGill
A
3. nemoj koristiti set precision
Ovako, to je pismeni teorijski ispit i u tri zadatka je, znaci prvi je objasniti naredbu int*B=new int[m]; to nije problem, a drugi je napisati funkciju za ucitavanje svih elemenata varijable B iz prethodnog zad. i treci napisati poziv te funkcije, ovo je rjesenje koje imam u kojem nesto fali:
void ucitaj(int B, int m){
for(int i=0;i<m;i++)
{
cout<<"Varijabla"<<i+1<<endl;
}
}
1. je li mislis na direktorij gdje se nalazi ili, obje datoteke se nalaze na istome mjestu.
Javlja mi se isti problem kao i prije?