├── 01 - 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
├── 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 - 옥찬호 - C++ Korea Seminar 3rd.pdf
└── 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 - 옥찬호 - C++ Korea Seminar 3rd.pptx
├── 02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
├── Examples
│ ├── WSAPoll
│ │ ├── WSAPoll_01.sln
│ │ ├── WSAPoll_01.vcxproj
│ │ ├── WSAPoll_01.vcxproj.filters
│ │ └── main.cpp
│ └── csharp_test_client
│ │ ├── App.config
│ │ ├── ClientSimpleTcp.cs
│ │ ├── DevLog.cs
│ │ ├── Program.cs
│ │ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ │ ├── csharp_test_client.csproj
│ │ ├── csharp_test_client.sln
│ │ ├── mainForm.Designer.cs
│ │ ├── mainForm.cs
│ │ └── mainForm.resx
├── 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback - 최흥배 - C++ Korea Seminar 3rd.pdf
└── 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback - 최흥배 - C++ Korea Seminar 3rd.pptx
├── 03 - Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기
├── Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기 - 유영천 - C++ Korea Seminar 3rd.pdf
└── Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기 - 유영천 - C++ Korea Seminar 3rd.pptx
├── 04 - 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기
├── 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기 - 허린 - C++ Korea Seminar 3rd.pdf
└── 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기 - 허린 - C++ Korea Seminar 3rd.pptx
└── README.md
/01 - 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기/새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 - 옥찬호 - C++ Korea Seminar 3rd.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/01 - 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기/새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 - 옥찬호 - C++ Korea Seminar 3rd.pdf
--------------------------------------------------------------------------------
/01 - 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기/새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 - 옥찬호 - C++ Korea Seminar 3rd.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/01 - 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기/새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기 - 옥찬호 - C++ Korea Seminar 3rd.pptx
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/WSAPoll/WSAPoll_01.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WSAPoll_01", "WSAPoll_01.vcxproj", "{128BAC82-0872-4F43-AA85-7A4374072BDF}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Debug|x86 = Debug|x86
12 | Release|x64 = Release|x64
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Debug|x64.ActiveCfg = Debug|x64
17 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Debug|x64.Build.0 = Debug|x64
18 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Debug|x86.ActiveCfg = Debug|Win32
19 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Debug|x86.Build.0 = Debug|Win32
20 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Release|x64.ActiveCfg = Release|x64
21 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Release|x64.Build.0 = Release|x64
22 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Release|x86.ActiveCfg = Release|Win32
23 | {128BAC82-0872-4F43-AA85-7A4374072BDF}.Release|x86.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/WSAPoll/WSAPoll_01.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | x64
19 |
20 |
21 |
22 | {128BAC82-0872-4F43-AA85-7A4374072BDF}
23 | Win32Proj
24 | WSAPoll_01
25 | 8.1
26 |
27 |
28 |
29 | Application
30 | true
31 | v140
32 | Unicode
33 |
34 |
35 | Application
36 | false
37 | v140
38 | true
39 | Unicode
40 |
41 |
42 | Application
43 | true
44 | v140
45 | Unicode
46 |
47 |
48 | Application
49 | false
50 | v140
51 | true
52 | Unicode
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | true
74 |
75 |
76 | true
77 |
78 |
79 | false
80 |
81 |
82 | false
83 |
84 |
85 |
86 |
87 |
88 | Level3
89 | Disabled
90 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
91 |
92 |
93 | Windows
94 | true
95 |
96 |
97 |
98 |
99 |
100 |
101 | Level3
102 | Disabled
103 | _DEBUG;_WINDOWS;%(PreprocessorDefinitions)
104 |
105 |
106 | Windows
107 | true
108 |
109 |
110 |
111 |
112 | Level3
113 |
114 |
115 | MaxSpeed
116 | true
117 | true
118 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
119 |
120 |
121 | Windows
122 | true
123 | true
124 | true
125 |
126 |
127 |
128 |
129 | Level3
130 |
131 |
132 | MaxSpeed
133 | true
134 | true
135 | NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
136 |
137 |
138 | Windows
139 | true
140 | true
141 | true
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/WSAPoll/WSAPoll_01.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/WSAPoll/main.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/WSAPoll/main.cpp
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/ClientSimpleTcp.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Net.Sockets;
3 | using System.Net;
4 |
5 | namespace csharp_test_client
6 | {
7 | public class ClientSimpleTcp
8 | {
9 | public Socket Sock = null;
10 | public string LatestErrorMsg;
11 |
12 |
13 | //소켓연결
14 | public bool Connect(string ip, int port)
15 | {
16 | try
17 | {
18 | IPAddress serverIP = IPAddress.Parse(ip);
19 | int serverPort = port;
20 |
21 | Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
22 | Sock.Connect(new IPEndPoint(serverIP, serverPort));
23 |
24 | if (Sock == null || Sock.Connected == false)
25 | {
26 | return false;
27 | }
28 |
29 | return true;
30 | }
31 | catch (Exception ex)
32 | {
33 | LatestErrorMsg = ex.Message;
34 | return false;
35 | }
36 | }
37 |
38 | public Tuple Receive()
39 | {
40 |
41 | try
42 | {
43 | byte[] ReadBuffer = new byte[2048];
44 | var nRecv = Sock.Receive(ReadBuffer, 0, ReadBuffer.Length, SocketFlags.None);
45 |
46 | if (nRecv == 0)
47 | {
48 | return null;
49 | }
50 |
51 | return Tuple.Create(nRecv,ReadBuffer);
52 | }
53 | catch (SocketException se)
54 | {
55 | LatestErrorMsg = se.Message;
56 | }
57 |
58 | return null;
59 | }
60 |
61 | //스트림에 쓰기
62 | public void Send(byte[] sendData)
63 | {
64 | try
65 | {
66 | if (Sock != null && Sock.Connected) //연결상태 유무 확인
67 | {
68 | Sock.Send(sendData, 0, sendData.Length, SocketFlags.None);
69 | }
70 | else
71 | {
72 | LatestErrorMsg = "먼저 채팅서버에 접속하세요!";
73 | }
74 | }
75 | catch (SocketException se)
76 | {
77 | LatestErrorMsg = se.Message;
78 | }
79 | }
80 |
81 | //소켓과 스트림 닫기
82 | public void Close()
83 | {
84 | if (Sock != null && Sock.Connected)
85 | {
86 | Sock.Shutdown(SocketShutdown.Both);
87 | Sock.Close();
88 | }
89 | }
90 |
91 | public bool IsConnected() { return (Sock != null && Sock.Connected) ? true : false; }
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/DevLog.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | using System.Runtime.CompilerServices;
8 | using System.Threading;
9 |
10 | namespace csharp_test_client
11 | {
12 | public class DevLog
13 | {
14 | static System.Collections.Concurrent.ConcurrentQueue logMsgQueue = new System.Collections.Concurrent.ConcurrentQueue();
15 |
16 | static Int64 출력가능_로그레벨 = (Int64)LOG_LEVEL.TRACE;
17 |
18 |
19 |
20 | static public void Init(LOG_LEVEL logLevel)
21 | {
22 | ChangeLogLevel(logLevel);
23 | }
24 |
25 | static public void ChangeLogLevel(LOG_LEVEL logLevel)
26 | {
27 | Interlocked.Exchange(ref 출력가능_로그레벨, (int)logLevel);
28 | }
29 |
30 | public static LOG_LEVEL CurrentLogLevel()
31 | {
32 | var curLogLevel = (LOG_LEVEL)Interlocked.Read(ref 출력가능_로그레벨);
33 | return curLogLevel;
34 | }
35 |
36 | static public void Write(string msg, LOG_LEVEL logLevel = LOG_LEVEL.TRACE,
37 | [CallerFilePath] string fileName = "",
38 | [CallerMemberName] string methodName = "",
39 | [CallerLineNumber] int lineNumber = 0)
40 | {
41 | if (CurrentLogLevel() <= logLevel)
42 | {
43 | logMsgQueue.Enqueue(string.Format("{0}:{1}| {2}", DateTime.Now, methodName, msg));
44 | }
45 | }
46 |
47 | static public bool GetLog(out string msg)
48 | {
49 | if (logMsgQueue.TryDequeue(out msg))
50 | {
51 | return true;
52 | }
53 |
54 | return false;
55 | }
56 |
57 | }
58 |
59 |
60 | public enum LOG_LEVEL
61 | {
62 | TRACE,
63 | DEBUG,
64 | INFO,
65 | WARN,
66 | ERROR,
67 | DISABLE
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace csharp_test_client
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// 해당 응용 프로그램의 주 진입점입니다.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new mainForm());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
6 | // 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
7 | // 이러한 특성 값을 변경하세요.
8 | [assembly: AssemblyTitle("csharp_test_client")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("csharp_test_client")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
18 | // 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
19 | // 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
20 | [assembly: ComVisible(false)]
21 |
22 | // 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
23 | [assembly: Guid("9e4b5e72-4e76-4e22-90b0-e53275a99018")]
24 |
25 | // 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
26 | //
27 | // 주 버전
28 | // 부 버전
29 | // 빌드 번호
30 | // 수정 버전
31 | //
32 | // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
33 | // 지정되도록 할 수 있습니다.
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 이 코드는 도구를 사용하여 생성되었습니다.
4 | // 런타임 버전:4.0.30319.42000
5 | //
6 | // 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
7 | // 이러한 변경 내용이 손실됩니다.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace csharp_test_client.Properties
12 | {
13 |
14 |
15 | ///
16 | /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
17 | ///
18 | // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
19 | // 클래스에서 자동으로 생성되었습니다.
20 | // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
21 | // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("csharp_test_client.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해
56 | /// 현재 스레드의 CurrentUICulture 속성을 재정의합니다.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace csharp_test_client.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/csharp_test_client.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {9E4B5E72-4E76-4E22-90B0-E53275A99018}
8 | WinExe
9 | Properties
10 | csharp_test_client
11 | csharp_test_client
12 | v4.5.2
13 | 512
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | Form
54 |
55 |
56 | mainForm.cs
57 |
58 |
59 |
60 |
61 | mainForm.cs
62 |
63 |
64 | ResXFileCodeGenerator
65 | Resources.Designer.cs
66 | Designer
67 |
68 |
69 | True
70 | Resources.resx
71 |
72 |
73 | SettingsSingleFileGenerator
74 | Settings.Designer.cs
75 |
76 |
77 | True
78 | Settings.settings
79 | True
80 |
81 |
82 |
83 |
84 |
85 |
86 |
93 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/csharp_test_client.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp_test_client", "csharp_test_client.csproj", "{9E4B5E72-4E76-4E22-90B0-E53275A99018}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {9E4B5E72-4E76-4E22-90B0-E53275A99018}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {9E4B5E72-4E76-4E22-90B0-E53275A99018}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {9E4B5E72-4E76-4E22-90B0-E53275A99018}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {9E4B5E72-4E76-4E22-90B0-E53275A99018}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/mainForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace csharp_test_client
2 | {
3 | partial class mainForm
4 | {
5 | ///
6 | /// 필수 디자이너 변수입니다.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// 사용 중인 모든 리소스를 정리합니다.
12 | ///
13 | /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form 디자이너에서 생성한 코드
24 |
25 | ///
26 | /// 디자이너 지원에 필요한 메서드입니다.
27 | /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.btnDisconnect = new System.Windows.Forms.Button();
32 | this.btnConnect = new System.Windows.Forms.Button();
33 | this.groupBox5 = new System.Windows.Forms.GroupBox();
34 | this.textBoxPort = new System.Windows.Forms.TextBox();
35 | this.label10 = new System.Windows.Forms.Label();
36 | this.checkBoxLocalHostIP = new System.Windows.Forms.CheckBox();
37 | this.textBoxIP = new System.Windows.Forms.TextBox();
38 | this.label9 = new System.Windows.Forms.Label();
39 | this.button1 = new System.Windows.Forms.Button();
40 | this.textSendText = new System.Windows.Forms.TextBox();
41 | this.labelStatus = new System.Windows.Forms.Label();
42 | this.listBoxLog = new System.Windows.Forms.ListBox();
43 | this.groupBox5.SuspendLayout();
44 | this.SuspendLayout();
45 | //
46 | // btnDisconnect
47 | //
48 | this.btnDisconnect.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
49 | this.btnDisconnect.Location = new System.Drawing.Point(425, 48);
50 | this.btnDisconnect.Name = "btnDisconnect";
51 | this.btnDisconnect.Size = new System.Drawing.Size(77, 30);
52 | this.btnDisconnect.TabIndex = 29;
53 | this.btnDisconnect.Text = "접속 끊기";
54 | this.btnDisconnect.UseVisualStyleBackColor = true;
55 | this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
56 | //
57 | // btnConnect
58 | //
59 | this.btnConnect.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
60 | this.btnConnect.Location = new System.Drawing.Point(421, 12);
61 | this.btnConnect.Name = "btnConnect";
62 | this.btnConnect.Size = new System.Drawing.Size(81, 30);
63 | this.btnConnect.TabIndex = 28;
64 | this.btnConnect.Text = "접속하기";
65 | this.btnConnect.UseVisualStyleBackColor = true;
66 | this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
67 | //
68 | // groupBox5
69 | //
70 | this.groupBox5.Controls.Add(this.textBoxPort);
71 | this.groupBox5.Controls.Add(this.label10);
72 | this.groupBox5.Controls.Add(this.checkBoxLocalHostIP);
73 | this.groupBox5.Controls.Add(this.textBoxIP);
74 | this.groupBox5.Controls.Add(this.label9);
75 | this.groupBox5.Location = new System.Drawing.Point(12, 12);
76 | this.groupBox5.Name = "groupBox5";
77 | this.groupBox5.Size = new System.Drawing.Size(403, 52);
78 | this.groupBox5.TabIndex = 27;
79 | this.groupBox5.TabStop = false;
80 | this.groupBox5.Text = "Socket 더미 클라이언트 설정";
81 | //
82 | // textBoxPort
83 | //
84 | this.textBoxPort.Location = new System.Drawing.Point(225, 20);
85 | this.textBoxPort.MaxLength = 6;
86 | this.textBoxPort.Name = "textBoxPort";
87 | this.textBoxPort.Size = new System.Drawing.Size(51, 21);
88 | this.textBoxPort.TabIndex = 18;
89 | this.textBoxPort.Text = "32452";
90 | this.textBoxPort.WordWrap = false;
91 | //
92 | // label10
93 | //
94 | this.label10.AutoSize = true;
95 | this.label10.Location = new System.Drawing.Point(163, 24);
96 | this.label10.Name = "label10";
97 | this.label10.Size = new System.Drawing.Size(61, 12);
98 | this.label10.TabIndex = 17;
99 | this.label10.Text = "포트 번호:";
100 | //
101 | // checkBoxLocalHostIP
102 | //
103 | this.checkBoxLocalHostIP.AutoSize = true;
104 | this.checkBoxLocalHostIP.Checked = true;
105 | this.checkBoxLocalHostIP.CheckState = System.Windows.Forms.CheckState.Checked;
106 | this.checkBoxLocalHostIP.Location = new System.Drawing.Point(285, 24);
107 | this.checkBoxLocalHostIP.Name = "checkBoxLocalHostIP";
108 | this.checkBoxLocalHostIP.Size = new System.Drawing.Size(103, 16);
109 | this.checkBoxLocalHostIP.TabIndex = 15;
110 | this.checkBoxLocalHostIP.Text = "localhost 사용";
111 | this.checkBoxLocalHostIP.UseVisualStyleBackColor = true;
112 | //
113 | // textBoxIP
114 | //
115 | this.textBoxIP.Location = new System.Drawing.Point(68, 19);
116 | this.textBoxIP.MaxLength = 6;
117 | this.textBoxIP.Name = "textBoxIP";
118 | this.textBoxIP.Size = new System.Drawing.Size(87, 21);
119 | this.textBoxIP.TabIndex = 11;
120 | this.textBoxIP.Text = "0.0.0.0";
121 | this.textBoxIP.WordWrap = false;
122 | //
123 | // label9
124 | //
125 | this.label9.AutoSize = true;
126 | this.label9.Location = new System.Drawing.Point(6, 23);
127 | this.label9.Name = "label9";
128 | this.label9.Size = new System.Drawing.Size(61, 12);
129 | this.label9.TabIndex = 10;
130 | this.label9.Text = "서버 주소:";
131 | //
132 | // button1
133 | //
134 | this.button1.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
135 | this.button1.Location = new System.Drawing.Point(319, 70);
136 | this.button1.Name = "button1";
137 | this.button1.Size = new System.Drawing.Size(100, 30);
138 | this.button1.TabIndex = 39;
139 | this.button1.Text = "텍스트 보내기";
140 | this.button1.UseVisualStyleBackColor = true;
141 | this.button1.Click += new System.EventHandler(this.button1_Click);
142 | //
143 | // textSendText
144 | //
145 | this.textSendText.Location = new System.Drawing.Point(12, 74);
146 | this.textSendText.MaxLength = 32;
147 | this.textSendText.Name = "textSendText";
148 | this.textSendText.Size = new System.Drawing.Size(301, 21);
149 | this.textSendText.TabIndex = 38;
150 | this.textSendText.Text = "test1";
151 | this.textSendText.WordWrap = false;
152 | //
153 | // labelStatus
154 | //
155 | this.labelStatus.AutoSize = true;
156 | this.labelStatus.Location = new System.Drawing.Point(12, 302);
157 | this.labelStatus.Name = "labelStatus";
158 | this.labelStatus.Size = new System.Drawing.Size(111, 12);
159 | this.labelStatus.TabIndex = 40;
160 | this.labelStatus.Text = "서버 접속 상태: ???";
161 | //
162 | // listBoxLog
163 | //
164 | this.listBoxLog.FormattingEnabled = true;
165 | this.listBoxLog.HorizontalScrollbar = true;
166 | this.listBoxLog.ItemHeight = 12;
167 | this.listBoxLog.Location = new System.Drawing.Point(12, 153);
168 | this.listBoxLog.Name = "listBoxLog";
169 | this.listBoxLog.Size = new System.Drawing.Size(490, 136);
170 | this.listBoxLog.TabIndex = 41;
171 | //
172 | // mainForm
173 | //
174 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
175 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
176 | this.ClientSize = new System.Drawing.Size(518, 328);
177 | this.Controls.Add(this.labelStatus);
178 | this.Controls.Add(this.listBoxLog);
179 | this.Controls.Add(this.button1);
180 | this.Controls.Add(this.textSendText);
181 | this.Controls.Add(this.btnDisconnect);
182 | this.Controls.Add(this.btnConnect);
183 | this.Controls.Add(this.groupBox5);
184 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
185 | this.Name = "mainForm";
186 | this.Text = "네트워크 테스트 클라이언트";
187 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.mainForm_FormClosing);
188 | this.Load += new System.EventHandler(this.mainForm_Load);
189 | this.groupBox5.ResumeLayout(false);
190 | this.groupBox5.PerformLayout();
191 | this.ResumeLayout(false);
192 | this.PerformLayout();
193 |
194 | }
195 |
196 | #endregion
197 |
198 | private System.Windows.Forms.Button btnDisconnect;
199 | private System.Windows.Forms.Button btnConnect;
200 | private System.Windows.Forms.GroupBox groupBox5;
201 | private System.Windows.Forms.TextBox textBoxPort;
202 | private System.Windows.Forms.Label label10;
203 | private System.Windows.Forms.CheckBox checkBoxLocalHostIP;
204 | private System.Windows.Forms.TextBox textBoxIP;
205 | private System.Windows.Forms.Label label9;
206 | private System.Windows.Forms.Button button1;
207 | private System.Windows.Forms.TextBox textSendText;
208 | private System.Windows.Forms.Label labelStatus;
209 | private System.Windows.Forms.ListBox listBoxLog;
210 | }
211 | }
212 |
213 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/mainForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 |
11 | namespace csharp_test_client
12 | {
13 | public partial class mainForm : Form
14 | {
15 | ClientSimpleTcp Network = new ClientSimpleTcp();
16 |
17 | bool IsNetworkThreadRunning = false;
18 |
19 | System.Threading.Thread NetworkReadThread = null;
20 | System.Threading.Thread NetworkSendThread = null;
21 |
22 | Queue SendPacketQueue = new Queue();
23 |
24 | System.Windows.Threading.DispatcherTimer dispatcherUITimer;
25 |
26 |
27 |
28 | public mainForm()
29 | {
30 | InitializeComponent();
31 | }
32 |
33 | private void mainForm_Load(object sender, EventArgs e)
34 | {
35 | IsNetworkThreadRunning = true;
36 | NetworkReadThread = new System.Threading.Thread(this.NetworkReadProcess);
37 | NetworkReadThread.Start();
38 | NetworkSendThread = new System.Threading.Thread(this.NetworkSendProcess);
39 | NetworkSendThread.Start();
40 |
41 | dispatcherUITimer = new System.Windows.Threading.DispatcherTimer();
42 | dispatcherUITimer.Tick += new EventHandler(BackGroundProcess);
43 | dispatcherUITimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
44 | dispatcherUITimer.Start();
45 |
46 | btnDisconnect.Enabled = false;
47 |
48 | DevLog.Write("프로그램 시작 !!!", LOG_LEVEL.INFO);
49 | }
50 |
51 | private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
52 | {
53 | IsNetworkThreadRunning = false;
54 |
55 | NetworkReadThread.Join();
56 | NetworkSendThread.Join();
57 | }
58 |
59 | private void btnConnect_Click(object sender, EventArgs e)
60 | {
61 | string address = textBoxIP.Text;
62 |
63 | if (checkBoxLocalHostIP.Checked)
64 | {
65 | address = "127.0.0.1";
66 | }
67 |
68 | int port = Convert.ToInt32(textBoxPort.Text);
69 |
70 | if (Network.Connect(address, port))
71 | {
72 | labelStatus.Text = string.Format("{0}. 서버에 접속 중", DateTime.Now);
73 | btnConnect.Enabled = false;
74 | btnDisconnect.Enabled = true;
75 | }
76 | else
77 | {
78 | labelStatus.Text = string.Format("{0}. 서버에 접속 실패", DateTime.Now);
79 | }
80 | }
81 |
82 | private void btnDisconnect_Click(object sender, EventArgs e)
83 | {
84 | SetDisconnectd();
85 | Network.Close();
86 | }
87 |
88 | private void button1_Click(object sender, EventArgs e)
89 | {
90 | if (string.IsNullOrEmpty(textSendText.Text))
91 | {
92 | MessageBox.Show("보낼 텍스트를 입력하세요");
93 | return;
94 | }
95 |
96 | List dataSource = new List();
97 | dataSource.AddRange(Encoding.UTF8.GetBytes(textSendText.Text));
98 |
99 | SendPacketQueue.Enqueue(dataSource.ToArray());
100 | }
101 |
102 |
103 |
104 | void NetworkReadProcess()
105 | {
106 | while (IsNetworkThreadRunning)
107 | {
108 | if (Network.IsConnected() == false)
109 | {
110 | continue;
111 | }
112 |
113 | var recvData = Network.Receive();
114 |
115 | if (recvData != null)
116 | {
117 | DevLog.Write($"받은 데이터: {recvData.Item2}", LOG_LEVEL.INFO);
118 | }
119 | else
120 | {
121 | DevLog.Write("서버와 접속 종료 !!!", LOG_LEVEL.INFO);
122 | }
123 | }
124 | }
125 |
126 | void NetworkSendProcess()
127 | {
128 | while (IsNetworkThreadRunning)
129 | {
130 | if (Network.IsConnected() == false)
131 | {
132 | continue;
133 | }
134 |
135 | lock (((System.Collections.ICollection)SendPacketQueue).SyncRoot)
136 | {
137 | if (SendPacketQueue.Count > 0)
138 | {
139 | var packet = SendPacketQueue.Dequeue();
140 | Network.Send(packet);
141 | }
142 | }
143 | }
144 | }
145 |
146 |
147 | void BackGroundProcess(object sender, EventArgs e)
148 | {
149 | ProcessLog();
150 |
151 | }
152 |
153 | private void ProcessLog()
154 | {
155 | // 너무 이 작업만 할 수 없으므로 일정 작업 이상을 하면 일단 패스한다.
156 | int logWorkCount = 0;
157 |
158 | while (true)
159 | {
160 | string msg;
161 |
162 | if (DevLog.GetLog(out msg))
163 | {
164 | ++logWorkCount;
165 |
166 | if (listBoxLog.Items.Count > 512)
167 | {
168 | listBoxLog.Items.Clear();
169 | }
170 |
171 | listBoxLog.Items.Add(msg);
172 | listBoxLog.SelectedIndex = listBoxLog.Items.Count - 1;
173 | }
174 | else
175 | {
176 | break;
177 | }
178 |
179 | if (logWorkCount > 8)
180 | {
181 | break;
182 | }
183 | }
184 | }
185 |
186 |
187 | public void SetDisconnectd()
188 | {
189 | if (btnConnect.Enabled == false)
190 | {
191 | btnConnect.Enabled = true;
192 | btnDisconnect.Enabled = false;
193 | }
194 |
195 | SendPacketQueue.Clear();
196 |
197 | labelStatus.Text = "서버 접속이 끊어짐";
198 | }
199 |
200 |
201 | }
202 | }
203 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/Examples/csharp_test_client/mainForm.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback - 최흥배 - C++ Korea Seminar 3rd.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback - 최흥배 - C++ Korea Seminar 3rd.pdf
--------------------------------------------------------------------------------
/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback - 최흥배 - C++ Korea Seminar 3rd.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/02 - 잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback/잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback - 최흥배 - C++ Korea Seminar 3rd.pptx
--------------------------------------------------------------------------------
/03 - Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기/Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기 - 유영천 - C++ Korea Seminar 3rd.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/03 - Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기/Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기 - 유영천 - C++ Korea Seminar 3rd.pdf
--------------------------------------------------------------------------------
/03 - Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기/Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기 - 유영천 - C++ Korea Seminar 3rd.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/03 - Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기/Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기 - 유영천 - C++ Korea Seminar 3rd.pptx
--------------------------------------------------------------------------------
/04 - 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기/데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기 - 허린 - C++ Korea Seminar 3rd.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/04 - 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기/데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기 - 허린 - C++ Korea Seminar 3rd.pdf
--------------------------------------------------------------------------------
/04 - 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기/데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기 - 허린 - C++ Korea Seminar 3rd.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CppKorea/CppKoreaSeminar3rd/21dde0383a022d972e2839114f8e43dcf9dfae86/04 - 데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기/데이터야, 너 살아있니, C++ 비동기 프로그래밍 알아보기 - 허린 - C++ Korea Seminar 3rd.pptx
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # C++ Korea 3rd Seminar
2 |
3 | 2017년 2월 18일에 진행되었던 C++ Korea 3회 세미나 발표 자료 및 예제 코드
4 |
5 | ## 목차
6 |
7 | - [새 C++은 새 Visual Studio에? 좌충우돌 마이그레이션 이야기](https://github.com/CppKorea/CppKoreaSeminar3rd/blob/master/01%20-%20%EC%83%88%20C%2B%2B%EC%9D%80%20%EC%83%88%20Visual%20Studio%EC%97%90%2C%20%EC%A2%8C%EC%B6%A9%EC%9A%B0%EB%8F%8C%20%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98%20%EC%9D%B4%EC%95%BC%EA%B8%B0/%EC%83%88%20C%2B%2B%EC%9D%80%20%EC%83%88%20Visual%20Studio%EC%97%90%2C%20%EC%A2%8C%EC%B6%A9%EC%9A%B0%EB%8F%8C%20%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98%20%EC%9D%B4%EC%95%BC%EA%B8%B0%20-%20%EC%98%A5%EC%B0%AC%ED%98%B8%20-%20C%2B%2B%20Korea%20Seminar%203rd.pdf) - 옥찬호
8 |
9 | - [잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback](https://github.com/CppKorea/CppKoreaSeminar3rd/blob/master/02%20-%20%EC%9E%98%20%EC%95%8C%EB%A0%A4%EC%A7%80%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EC%88%A8%EC%9D%80%20%EC%A7%84%EC%A3%BC%2C%20Winsock%20API%20-%20WSAPoll%2C%20Fast%20Loopback/%EC%9E%98%20%EC%95%8C%EB%A0%A4%EC%A7%80%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EC%88%A8%EC%9D%80%20%EC%A7%84%EC%A3%BC%2C%20Winsock%20API%20-%20WSAPoll%2C%20Fast%20Loopback%20-%20%EC%B5%9C%ED%9D%A5%EB%B0%B0%20-%20C%2B%2B%20Korea%20Seminar%203rd.pdf) - 최흥배
10 |
11 | - [Do it yourself! C++과 DirectX로 Windows Holographic 앱 개발하기](https://github.com/CppKorea/CppKoreaSeminar3rd/blob/master/03%20-%20Do%20it%20yourself!%20C%2B%2B%EA%B3%BC%20DirectX%EB%A1%9C%20Windows%20Holographic%20%EC%95%B1%20%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0/Do%20it%20yourself!%20C%2B%2B%EA%B3%BC%20DirectX%EB%A1%9C%20Windows%20Holographic%20%EC%95%B1%20%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0%20-%20%EC%9C%A0%EC%98%81%EC%B2%9C%20-%20C%2B%2B%20Korea%20Seminar%203rd.pdf) - 유영천
12 |
13 | - [데이터야, 너 살아있니? C++ 비동기 프로그래밍 알아보기](https://github.com/CppKorea/CppKoreaSeminar3rd/blob/master/04%20-%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%95%BC%2C%20%EB%84%88%20%EC%82%B4%EC%95%84%EC%9E%88%EB%8B%88%2C%20C%2B%2B%20%EB%B9%84%EB%8F%99%EA%B8%B0%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%95%BC%2C%20%EB%84%88%20%EC%82%B4%EC%95%84%EC%9E%88%EB%8B%88%2C%20C%2B%2B%20%EB%B9%84%EB%8F%99%EA%B8%B0%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0%20-%20%ED%97%88%EB%A6%B0%20-%20C%2B%2B%20Korea%20Seminar%203rd.pdf) - 허린
--------------------------------------------------------------------------------