๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Double Buffered Circular Queue๋กœ ํŒจํ‚ท ์ฃผ๊ณ  ๋ฐ›๊ธฐ 2

๐ŸŽฎinspirer9 2021. 2. 3. 00:23
728x90
๋ฐ˜์‘ํ˜•

Double Buffered Circular Queue๋ฅผ ์ด์šฉํ•ด์„œ ํŒจํ‚ท ์ฃผ๊ณ  ๋ฐ›๊ธฐ๋ฅผ ๊ณต๋ถ€ํ–ˆ๋‹ค.

๊ณ ๋ฏผํ•˜๊ณ  ํ…ŒํŠธ๋ฆฌ์Šคํ•˜๊ณ , ๋†€๊ณ  ๋ฐฅ๋จน๊ณ  TV๋ณด๊ณ  ์ฑ…๋ณด๊ณ , ๋ฐ–์— ๋‚˜๊ฐ”๋‹ค๊ฐ€, ์Œ๋ฃŒ์ˆ˜ ํ•˜๋‚˜ ๋นจ๊ณ ...

๊ทธ๋ ‡๊ฒŒ 3์ผ์„ ๋†€๋‹ค๊ฐ€ ๋จธ๋ฆฌ์— ๋ฒˆ๊ฐœ ๋งž์•„์„œ 1์‹œ๊ฐ„ ๋™์•ˆ ๋ฌดํ•œ๋„์ „ ๋ณด๋ฉด์„œ ์ฝ”๋”ฉํ–ˆ๋‹ค.

์˜์™ธ๋กœ ๊ฐ„๋‹จํžˆ ๋ฌธ์ œํ•ด๊ฒฐ >_<b

๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š”๊ฑด๋ฐ, ๊ดœํžˆ if๋ฌธ ์—ฌ๋Ÿฟ ์จ์„œ ์กฐ๊ฑด๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋‹ค.

while(1) {
ใ€€if( Q.isFull() == false ){ // ํ๊ฐ€ ๊ฝ‰ ์•ˆ ์ฐผ์œผ๋ฉด
ใ€€ใ€€recvMsgSize = recv( clntSocket, Q.GetEnqPos(), Q.GetEnqSize() - PKTLEN, 0);
ใ€€ใ€€Q.Enq( recvMsgSize ); // ์ผ๋‹จ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋‚จ์€ ํฌ๊ธฐ ๋งŒํผ ๋ฐ›์•„์„œ ํ์— ๋„ฃ๋Š”๋‹ค..
ใ€€} else { // ํ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด
ใ€€ใ€€while( Q.isEmpty() == false ){ // ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€
ใ€€ใ€€ใ€€if( Q.GetDeqSize() >= Q.GetSize() ){ // ๊ฐ€์ ธ์˜ฌ ํŒจํ‚ท ํฌ๊ธฐ๊ฐ€ ํ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฌ๋ฉด
ใ€€ใ€€ใ€€ใ€€Q.DeQ( (char*)&pkt, Q.GetDeqSize() ); // ๋””ํํ•˜๊ณ 
ใ€€ใ€€ใ€€} else { // ํํฌ๊ธฐ๊ฐ€ ๊ฐ€์ ธ์˜ฌ ํŒจํ‚ท ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์œผ๋ฉด
ใ€€ใ€€ใ€€ใ€€recvMsgSize = recv( clntSocket, Q.GetEnqPos(), Q.GetDeqSize() - Q.GetSize(), 0);
ใ€€ใ€€ใ€€ใ€€Q.Enq( recvMsgSize ); // ๋ถ€์กฑํ•œ ๋งŒํผ๋งŒ ๋ฐ›์•„์„œ ํ์— ๋„ฃ๋Š”๋‹ค..
ใ€€}}}
ใ€€if( recvMsgSize == 0 ) error_handling(); // ๋ฐ›์€ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ด๋ฉด Disconnect๋œ ๊ฒƒ.
}

์ž ์‹œ ๋ฐ”๋žŒ์„ ์˜์ด๋ฉด ์•Œ์•„์„œ ๊ตฌ์กฐ๊ฐ€ ์ตœ์ ํ™”๊ฐ€ ๋˜๋Š”๊ตฌ๋‚˜...

์—ญ์‹œ ์ธ๊ฐ„์˜ ๋‡Œ๋Š” ์‹ ๋น„๋กญ๊ตฐ...ใ…‹

728x90
๋ฐ˜์‘ํ˜•