-
GAMEPOD.hu
Új hozzászólás Aktív témák
-
Spyx
tag
hali van egy kis problémám.
a következővel írok file-ba szöveget ( kif.print() )
PrintWriter kif=new PrintWriter(new BufferedWriter(new FileWriter(''feladat.ki'')));
a program során írok jó sok sort a feladat.ki-be. és mielőtt kilépnék a fileból még kéne írnom egy számot az első sorba. mivel tudom visszapozícionálni a kurzort az elejére??
Please help!! előre is köszi
SpyxGyötrődő halálos játék: élet! Tőled én még mit kívánnék?!...
-
Spyx
tag
válasz emitter #1653 üzenetére
kössz a választ. de elfelejtettem a legfontosabbat. JAVA -ban van a kód.
az fseek -et ismertem, de az csak C-ben van. bocs a pontatlanságért
amikor megnyitom a file-t akkor még nem tudom hogymi lesz az a szám
egy cikluson belül számolódnak az adatok amikkel a sorokat töltöm fel és a végén a ciklus lefutásának a számát kellene az elejére írnomGyötrődő halálos játék: élet! Tőled én még mit kívánnék?!...
-
emitter
őstag
linuxon hogyan tudok integerből, ill. short-ból char*-ot csinálni?
stdlib.h-beli itoa()-ra ''was not declared in this scope'' dob..
másik kérdés, hogy fordítva hogyan tudok shortot csinálni a char*-ból? integer megy egy sima (int) castolással, de short-ra nem engedi, merthogy elveszti a pontosságát a szám - ez logikus, de akkor hogyan csináljam -
Jester01
veterán
válasz emitter #1658 üzenetére
A castolás nem konvertál, az (int)''1'' eredménye nem 1 lesz, hanem a stringre mutató pointer értéke. Stringbõl számot strtol, strtoul, strtod (hibakezelés miatt ajánlott) vagy az atoi, atol, atoll, atof illetve sscanf függvényekkel lehet. Visszafelé sprintf, snprintf.
Jester
-
emitter
őstag
válasz Jester01 #1659 üzenetére
sprintf() köszi! ezzel jó
viszont újabb értelmetlen dolog előtt állok, van ez a kódrészlet:
cout << ''elotte\n'' << endl;
fseek(handle, wi.fp, SEEK_SET);
cout << ''utana\n'' << endl;
//komment kezdete
sprintf( buf_int, ''%d'', wi.sample_rate);
i = strlen(buf_int);
if(send(data_fd, buf_int, i, 0) == -1){
perror(''send'');
exit(1);
}
sprintf( buf_int, ''%d'', wi.bits_per_sample);
i = strlen(buf_int);
if(send(data_fd, buf_int, i, 0) == -1){
perror(''send'');
exit(1);
}
//komment vege
cout << ''elotte\n'' << endl;
fseek(handle, wi.fp, SEEK_SET);
cout << ''utana\n'' << endl;
----------
namost ez a következőt csinálja:
elotte
utana
elotte
Szegmens hiba
ha viszont a ''komment kezdete'' és a ''komment vege'' közti részt kikommentelem, akkor nem ad hibát, hanem
elotte
utana
elotte
utana
telejesen értetlen vagyok.. -
Jester01
veterán
-
emitter
őstag
válasz Jester01 #1661 üzenetére
igazad volt, még így látatlanban is megtaláltad a hibát
most viszont már a send() és recv() hívásokkal vagyok bajban, mert kiküldök send-del egymás után 3 adatot (mindegyik más hosszúságú char*), majd ezeket szeretném recv-elni, ami nem sikerül.. az első adat rendben megérkezik, a többi viszont sehogy sem akar eredeti formájában megérkezni..
ha jól tudom, ezek a hívások blokkolnak, szóval olyan nem lehet, hogy elmulasztok egy adatcsomagot a szinkronizáció hiánya miatt, ugye?
a kódot azért nem raknám be, mert tele van mindenféle debug-kiíratásokkal, még nekem is nehéz átlátni de ha gondolod, belinkelhetem..
szóval elvileg előfordulhat olyan, hogy sendelek 1 csomagot, megérkezik (ezután a fogadó oldalon csinálok egy csomó mindent - emiatt elképzelhető, hogy a következő csomag még eközben érkezik meg, így a fogadó fél lecsúszik a fogadásáról? van ilyen - vagy az oprendszer eltárolja vmi bufferban a beérkezett csomagokat?) -
Jester01
veterán
válasz emitter #1662 üzenetére
az oprendszer eltárolja vmi bufferban a beérkezett csomagokat?
Igen.
MOD: Persze csak egy darabig. Viszont a TCP az megbízható kapcsolatot garantál, szóval ha meg is telik a buffer, akkor is meg fogod kapni az adatokat mert késõbb újra elküldi a kliens.
[Szerkesztve]Jester
-
emitter
őstag
válasz Jester01 #1663 üzenetére
értem, köszi
ez egyre jobb.. teljesen kész vagyok: fordítom mindkét progit (server, kliens), ezután első futtatásra teljesen jól átjönnek az adtaok, minden OK, úgy ahogy szeretném
ezután második futtatásra már tök random cuccok érkeznek meg ez mitől lehet?!
csak az újrafordítás segít ezen..
na, felrakom a forrásokat, íme
server: [link]
kliens: [link] -
emitter
őstag
válasz Jester01 #1671 üzenetére
ha egymás után többször írok ilyet:
-----
data = new int;
...
delete data;
-----
(előtte van egy int* data;), szal miért dob ilyet? a server progiban ugyanezt csinálom, ott nem ad hibát..
*** glibc detected *** double free or corruption (!prev): 0x0804b010 ***
felraktam a forrásokat -
emitter
őstag
válasz emitter #1672 üzenetére
asszem megvan: a new hívás után ráállítottam még a data-t egy másik változó címére...
szóval pl ehelyett
data = &wi.channels;
ezt írom:
*data = wi.channels;
de így sem jó a dolog, éppúgy csak az első átvitt adat helyes, a több random
akkor mi történik, ha nem new-val rakok alá memót, hanem simán alátolom egy létező válozó címét - és ezután kiadok egy delete data; utasítást? ekkor csak leáll róla, vagy törli a wi.channels-t?
pl.
data = &wi.channels;
delete data; -
emitter
őstag
válasz emitter #1675 üzenetére
az az érzésem, hogy a send lényegesen gyorsabban küldi az adatokat, mint ahogy én fogadni meg közben lejátszani tudom... ez előfordulhat? mert csak 2-3x fut le a main loop a szervernél, azaz csak 2-3x írja ki, h ''readbytes: xx'', bár ezt is rosszul, mert csak az első kiírásnál helyes az adat..
-
emitter
őstag
újra a select()-tel vannak problémáim... mégpedig az, hogy túl nagy a minimum-időintervalluma (1 mikrosec.), amíg várakozik
nekem nagyon kicsi ideig kéne csak h megnézze az STDIN-t, különben nem tudja a progi elég gyorsan adagolni a hálózatra a wavot...
ja és mindez azért kéne, hogy tudjak wavjátszás közben pause-zni, stb.
most így selectelek:
---------
fd_set readfds;
struct timeval tv;
...
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
while(!feof(handle)){
tv.tv_sec = 0;
tv.tv_usec = 1; // még 1 usec is nagyon sok idő neki
select(STDIN+1, &readfds, NULL, NULL, &tv);
if( FD_ISSET(STDIN, &readfds) ){
cout << ''\nBillentyu lenyomva!\n'';
return 0;
}
...//itt olvasok a wavból, és send()-elem el
------
nagyon jó lenne, ha nem kéne lemondanom a lejátszás vezérléséről... szóval csak van erre vmi megoldás -
emitter
őstag
válasz Jester01 #1679 üzenetére
nem igazán értem, ami gondolsz..
beraktam, vagy nem így kéne?
----------
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_SET(STDIN, &readfds);
FD_SET(data_fd, &writefds);
while(!feof(handle)){
tv.tv_sec = 0;
tv.tv_usec = 0;
select(data_fd+1, &readfds, &writefds, NULL, &tv);
if( FD_ISSET(STDIN, &readfds) ){
cout << ''\nBillentyu lenyomva!\n'';
exit(1);
...
--------
mit jelent az hogy lehet írni a hálózatra? ezt nem értettem
szerk: ja elfelejtettem hogy így sem megy - hiába nyomom akár folyton az entert, nem lép ki a progiból
[Szerkesztve] -
Jester01
veterán
-
Szsolt
tag
Sziasztok!
A következő c++ programot alkottam:
#include <iostream>
#include <vector>
using namespace std;
class Proba {
public:
vector <int> v;
Proba() {
for (int i=0; i<10; ++i)
v.push_back(i);
}
vector <int> getV() {
return v;
}
};
int main() {
Proba p;
for (int i=0; i<p.getV().size(); ++i)
printf(''%d '', p.getV());
printf(''\n'');
p.getV().pop_back(); // Ha itt p.v.pop_back()-t használok akkot töröl a vectorból
for (int i=0; i<p.getV().size(); ++i)
printf(''%d '', p.getV());
printf(''\n'');
return 0;
}
A probléma az, hogy ezt használbva: ''p.getV().pop_back();'' nem töröl a vectorból.
Mi a különbség a direk és a getV()-s hivatkozás közöt?
Üdv! -
emitter
őstag
vajon miért nem működik az én kis pufferelő lejátszóm? belerakom a short típusú wav-adatokat egy listába, majd megvárom, míg eléggé feltöltődik, ezután elkezdem lejátszani
------
list<short> wavList;
...
if( ctrl == PLAY ){
numbytes = recv(data_fd, wav_buf, wi->bufsize*sizeof(short), 0);
if (numbytes == -1) {
perror(''recv'');
exit(0);
}
if (numbytes == 0){ //a kliens befejezte a beszelgetest
break;
}
if(buflevel > 16){
for(i=0; i < wi->bufsize; i++){
wav_buf = wavList.front();
wavList.pop_front();
}
if(snd_pcm_writei (wi->playback_handle, wav_buf, readbytes) < 0) {
cout << ''\nFehler\n'';
exit(0);
}
buflevel--;
}
for(i=0; i < wi->bufsize; i++){
wavList.push_back(wav_buf);
}
buflevel++;
}
...
---------
szóval: megvárom, míg 16 db lejátszanivaló adag összegyűlik a listában, ezután rakom vissza a listából
ha nem használok listát biztonsági pufferként, akkor rendesen lejátsza, de nekem kéne puffer
a másik, hogy ha a kliensben lepausézom a lejátszást, hirtelen megugrik a procihasználat és ott is marad - pedig a serverben és a kliensben is select-tel figyelem a hálózati aktivitást, és az elvileg nem eszik procit..
a források:
server: [link]
kliens: [link]
szerk: a pause funkció még nem okés, de sztem csak azért nem, mert nem működik még a biztonsági puffer, így ha pause-zott állapotában kap a server egy Play-jelet, előbb küldené a puffert a hangkártyának, mint átérkezett volna a friss adag wav...
[Szerkesztve] -
Jester01
veterán
válasz emitter #1685 üzenetére
Azért ugrik meg a procihasználat, mert megállított állapotban nyilván nem kellene a select writefds közé a socket. Hiszen hiába is tudnál írni a hálózatra ha egyszer nem akarsz. Szóval most a select rögtön visszatér, hogy hajrá küldjél adatot, te viszont nem csinálsz semmit. Vagyis ott pörög a szerencsétlen.
A többit még nézem, majd jövökJester
-
Jester01
veterán
válasz emitter #1685 üzenetére
Ez a bufferelés egy nagy káosz nekem. Nem igazán értem ki kivel van.
Elõször ott van ugye a buflevel. Gondolom ez mondja meg mennyi byte van már a bufferben. Utána van egy ciklus ami wi->bufsize-ig fut Az snd_pcm_writei pedig már readbytes mennyiséget küld a hangkártyának.Jester
-
emitter
őstag
válasz Jester01 #1687 üzenetére
köszi, erre a select-es bibre sosem jöttem volna rá magamtól most már nem eszik prockót
a ciklus azért fut bufsize-ig, mert akkora a puffer (wav_buf) mérete (ami ugye shortokat tartalmaz)
ha átírom a cilusokat, és csak readbytes-ig futnak, akkor már tényleg megszólal a zene, de nagyon zavarosan, zajosan.. ez nem tudom mitől lehet
(frissítettem a forrásokat a neten)
másrészt azért is gondolom, h a cilusoknak bufsize-ig kell futniuk, mert itt van pl. ez a progi [link], ez volt az alapja a wav-lejátszásnak, és itt is bepakolom a wavot egy listába (egy bufsize-ih futó ciklussal), amiből szépen vissza is tudom rakni a pufferba.. na és ha ebben a progiban átírom a ciklust, és csak readbytes-ig fut, akkor néha ugyan jól lejátsza a wavot, de sokszor hibát ad vissza az snd_pcm_writei() szóval ezért maradnék a bufsize-ig futó cilkusnál
[szerk: ] ja és a buflevel nem a listában lévő bájtok számát mutatja, hanem a benne lévő wav_buf-ok számát, azaz pl ha buflevel 16, akkor van benne 16*bufsize*sizeof(short) bájt
[Szerkesztve] -
emitter
őstag
miért nem működik nálam az mvprintw??
...
initscr();
clear();
mvprintw(1, 0, ''mvprintw'');
...
nem ír ki semmit, viszont cout-tal működik emlékeszem, régebben már kipróbáltam ezt a kiírófv-t, és ment
ncurses.h-t behúzom, nem is kapok semmi hibát, mégsem jó -
BlackV
senior tag
Sziasztok! Lehet olyan progit írni, amit ha aktiválok és ez után bárhova írok vmit, /mondjuk Word/ akkor minden egyes leütött karakter közé beékel nekem egy általam megadott karaktert? Hogy mire kell azt ne kérdezzétek Bonyolult megírni egy ilyet?
-
Daveeboy
tag
Sziasztok!
[link]
Ebben a témaban ha tudna valaki segíteni, az sokat jelentene nekem.
Előre is köszi!
[Szerkesztve] -
aranyosij
csendes tag
Hali,
lenne egy feladatom, ilyennel találkozott már vki?
vagy ha nem, mennyire bonyolult megírni?
http://www.kepfeltoltes.hu/view/060507/beadando_www.kepfeltoltes.hu_.jpg
thxpauz
-
emitter
őstag
válasz aranyosij #1694 üzenetére
ez választható feladat vagy mi? ha ránézésre nem tudod eldönteni, hogy bonyolult-e vagy nem, akkor meggondolnám a helyedben, mielőtt belevágom a fejszémet
azért itt egy jó kis leírás [link] a hálózatos programozás alapjairól, neked különösen ajánlom átolvasni a ''6.2. select() - Szinkron I/O Multiplexelés'' részt, azon belül találsz egy nagyon egyszerű példát egy chat-programra, amit továbbfejleszthetsz
sok sikert!
mod: a link
[Szerkesztve] -
emitter
őstag
neked meg mindenképp azt ajánlom, hogy áruld el a feladatod mibenlétét, mert így nagyon nehéz segíteni NEM röhögünk ki senkit, ha bizonytalan vagy, privizhetsz is
amúgy realtime akármilyen programot szövegszerkesztésre használva szvsz lehetetlen ilyet csinálni.. vagy ahhoz már a billentyűzet driverjét kéne átírni -
Gregorius
őstag
Bonyolult ügy. Megcsinálható, de bonyolult. Alapvetően két megoldásban lehet gondolkodni. Egyrészt lehet próbálkozni filter driverrel, ami az überprofi programozó és a félisten programozó szintje között van valahol. Másrészt meg lehet keyboard hook-kal meg WM-ekkel dolgozni, ez kevésbé biztos a multitasking miatt (nem garantált, hogy a leütések mindig felváltva követik egymást), de ez is elég messze van a HelloWorld kategóriától.
Ezekből lehet okkulni:
[link]
[link]
[Szerkesztve]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Be quiet! Pure Wings 2 140mm PWM High-Speed
- Ejha! HP EliteBook 840 G6 Fémházas Laptop 14" -70% i5-8365U 4Mag 16Gb 1TB SSD FHD IPS + Táska!
- ELADÓ intel i5-9400f (igény esetén hűtővel)
- GeForce EVGA GTX 1660 SUPER 6GB
- Részletfizetés. Bontatlan. noblechairs EPIC székek azonnal . 24 / 36 hónap garancia . +36301300000
- Mercusys MR70X Router, AX1800, Dual-Band, WiFi 6, garis eladó!
- ÚJ! Western Digital Red 4TB merevlemezek. Számlával, garanciával!
- Garmin Venu 3S okosóra - Pebble Grey, Slate rozsdamentes acél kerettel
- Új! - Univerzális Milánói fém szíj 22mm - Ezüst színben
- Philips Hue Devote fehér függesztett csillár + White Ambiance izzó