Jump to content

[FAQ dla C++]


Jason
 Share

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

  • 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 to comment
Share on other sites

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 to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...