├── 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) - 허린 --------------------------------------------------------------------------------