Skocz do zawartości

[FAQ dla C++]


Jason
 Share

Polecane posty

Można by tą wskazówkę nazwać "Jak przyspieszyć strumienie, aby były tak wydajne jak printf, scanf ?" - na poczekaniu krótszej nazwy nie wymyślę :D

a oto treść:

 

Aby przyspieszyć działanie strumieni (chodzi tu o cin, cout) należy na początku programu dodać linijkę:

ios_base::sync_with_stdio(0);

Już powinno być ok. Na problem z szybkością wyświetlania danych spotkałem się jak było zadanie (przeznaczone dla TP, ale że chciałem poćwiczyć w C++ to w nim robiłem :) ) aby wyświetlić wszystkie 4-literowe kombinacje znaków, w C++'ie robiło (właśnie przez cout) tragicznie wolno, jak zmieniłem kod na printf było o niebo lepiej, ale dzięki tej linijce już powinno być równie szybko :) // bo strumienie były wolniejsze niż funkcje, niestety :)

Link do komentarza
Udostępnij na innych stronach

Hmm..przedstawię swój pogląd w tej sprawie..

Otóż strumienie cin/cout sa buforowane, co znaczy, że jeżeli każemy coś wypisać, to nie zostanie to zrobione od razu, tylko dopiero jak uzbiera się trochę danych, hurtem. ios_base::sync_with_stdio(0); używane jest po to, aby umożliwić poprawną współpracę funkcji z stdio ze strumieniami; dane będą wypisywane od razu, gdy sobie tego zażyczymy; to raczej ze względu na starocia-stdio trzeba teog używać żeby nie było problemów, strumienie nie są tu niczemu winne :D Poza tym, strumienie wydajniejsze od funkcji z stdio. Nie będę przytaczał argumentów, zainteresowanych odsyłam do trzeciego tomu Symfonii C++ ;-)

Link do komentarza
Udostępnij na innych stronach

Spoko. Sęk tylko w tym, że to najlepsza książka o programowaniu jaką dane mi było czytać, polecam wszystkim. A co do teorii, to tak, ale jest też dużo świetnie dobranych i omówionych przykładów ;-)

 

// Edit: Troche to zmienie i dodam jako 'Co zrobić, aby strumienie oraz funkcje z stdio współpracowały poprawnie?'

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

mam kolejny, a nie chcę dodawać tematu nowego bo i tak dostaniesz informację :)

więc dodaj to :) :

 

Jak zrobić by nia dało się przemieszczać okna za belkę tytułową (i w ogóle) ?

HMENU hMenu = GetSystemMenu(uchwytOkna, FALSE); // hMenu przZ]ZHX]Y[H[[Y[YH
<[HmRŚW7B6Ś'ŚVć[bFVĆWFTVRVR45dRe%
=559

Można też się bawić z komunikatem WM_NCHITTEST, ale tego jest dużo więcej niż 2 liniki :] .

Link do komentarza
Udostępnij na innych stronach

No to mam kolejną rzecz do FAQ:

 

"Jak zainicjować tryb OpenGL na staticu (coś w stylu komponentu Panel z VCL - Delphi, BCB) ?"

 

Na początku zadeklarujmy zmienne których użyjemy:

static HDC hDC;
static HGLRC hRC;
static HWND hstat;%l$ĄyZicD@v{,)ĆŚ        hstat=CreateWindow(\"static\",\"\",WS_CHILD|WS_VISIBLE,
  LL
QSJM][[R[JS
KS$óy3zxśŚDDć)Ż7~r3.ÓĆ{K\"z7G#ĘipfBF6&ĆTVttBvćBD2D2t$2$2}ą5
Ą9U109U104(ąąŃ
ŃĄĄI4(ReleaseDC (hWnd, hDC);
}%LŁzlŁ^Ęhą)][JYYHOUÓWURU
CBBYYZÓYYJ&ś6rTRR$TdRG&ąŃ54(ŃĄ5);
     }
     else
     {
        DrawGLScene();
YĘĘNBCBH%7,ś'Łz]Ąś^jx-iŻ<i0ĘKkĘhliz7Ł<\"z7ł7'śb\"r$ąą4(ąą4(ąe <gl/glu.h>
/*  Declare Windows procedure  */
HWND\"BTSSP[YH
ÓRSTSK$ŚBG&tt66VćRtfBfBVć&ĆTVttB]!Ą!1IĄI4)ą=0Ą!]9Ą]DC hDC, HGLRC hRC);
static HDC hDC;
static HGLRC hRC;
staXÓ]BĘXZHH[YH[H[XZĆRŚ6\"76Ć74ćU$6FT&Ć65vćFw4#Ś]%9A$]5Ą!%9MQ9
ĄQĄ%Ń4(    HINSTANCE hPrevInstance,
                    LPSTR lpr[Y[b[[[
CBBBvćCF22FRćFĆRf\"W\"vćFr\0ź4(5Mź!џѥąŃn are saved */
   WNDCLASSEX wincl;        /* Data structtHH[
BBĘH[XH
Bvć6ć7Fć6RF47Fć6Svć6ć76Ć74ć
ą94(ą]A]A  /* This function is called by windows */
   wincl.style#HŃÓĘ]XKXX
Bvć6ć6%6ŚR6ŚVbtD454UW6RFVfVB5Ńź4(Ą%1%Ą9U10%_APPLICATION);
   wincl.hIconSm = LoadIcon (NULL, IDI_APPNPUSÓNB[HY
SQTĘNvć6ć7VTćRTćVR4(
ąŃź9źŃbytes after the window class */
   wincl.cbWndExtra = 0;  ĘXHH[[[H
BW6RvćFw2w2FVfVB6Ć\"2FR&6św&VćBbFRuź4(Ą Ą!  IUM 
=1=I}   
-I=U9

   /* Register the window class, and if it fails quit vH[H
BY
TYŃ^
       [[
JCB
&WGW&FR6Ć722&Vv7FW&VBĆWBw27&VFRĄź4(Ą]
Ń]4(              /* Extended possibilites for variation */
  Ó[YKĘ[YH
BFSŁ&Ć62FVĆFRvćFw2\"FFĆRFWB\0]M}=YI1AA]%9=źąź4(  CW_USEDEFAULT,       /* Windows decides the position */
TŃQQUSĘHH[[FR67&VVSCBFR&w%Ńź4(źĄĄŚ pixels */
          HWND_DESKTOP,        /* The window ipH[][
BS
ćVRF47Fć6R&w&ŃĄąź4(9U10ź9ź]Śdow Creation data */
          );

   /* Make the windmXHHY[
B[
[vćCvćCVć&ĆTVt7FBfśD2fĄI4(źIŃĄą%ąŃŃ5age() returns 0 */
   while( msg.message!=WM_QUIT )
  {YYZÓYYJ     [sKKWSSH
HG& amp;6ĆFTW76vRfś6rŃĄ54(4(ą4(4
(       DrawGLScene();
        SwapBuffers(hDC);
     }
CBBĘH[H]][YHHH[YH^7EVDW76vRvfR&WGW&6ru&ÓQĄŃąąŃĄ]ŃŃĄ5sage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, VSYYKTSH[KTSH[JCBB]
[76vRćFĆRFRW76vW2\0%]5}
IQ4(%ĄŃ
Ń]ĄpŃŃpąppą__CHILD|WS_VISIBLE,
       10,10,200,200,hwnd,(HMENU)666,Ge[[R[JS
KS
NBXXZBHÓWŃT$F6&ĆTVt7FBĆD2Ć$2AŃEŃ5ź]5}EU%Pџѥueue */
           break;
       default:               ĘYY]HX[]
B
&WGW&FVevćFu&2vćBW76vRu&&4(4(Ń4)4(4)1MĄ14)4(    glLoadIdentity();
           glClearColor (0.0f, 0.0f,NBX
ÓÓÓQTU
NB
v&VvtTE2v6Ć#6b\"ąYŃ4(ą
ąąYrtex2f(90,15);
           glColor3f(0.9,0.1,1);glVertex2f*LL
NBKJN^MKLvVćBfBVć&ĆTVttBvćBĄ!1IĄI4)4(A%a1=I5QM
I%AQ=H4(int iFormat;

   /* get the device context (DC) */
   *H]

NBBĘ]H^[X]HŚW&V' ffB6ŚVbfBfBć6ŚPĄ4(Y4(ą
A_DRAW_TO_WINDOW |
     PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFETBT^[HHTWNB]3#fBć4FWF&G2cfBćĆW%GRdE9}A194(
ĄAąĄ6    SetPixelFormat (*hDC, iFormat, &pfd);

   /* creaH[[XHH[^
ĘH
B
HX^T6FWBŚD2vvśT7W'&VBŚD2Ś$2GWFąŃŃąŃ)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrthl

NBX]^[JÓÓSŃSQUĘNBYY[]fBF6&ĆTVttBvćBD2D2t$2$2)4(ą5
Ą9U109U104(ąąŃ
ŃRC);
   ReleaseDC (hWnd, hDC);
}

 

należy nie zapomnieć o podlinkowaniu libów opengl32 i glu32.

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
 Share

×
×
  • Utwórz nowe...