<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          tin-project完整實(shí)現(xiàn)的 C++ 版 Go 語言運(yùn)行時(shí)

          聯(lián)合創(chuàng)作 · 2023-10-01 10:45

          tin 項(xiàng)目是完整實(shí)現(xiàn)的 C++ 版 go 語言運(yùn)行時(shí)。它參考 go 語言運(yùn)行時(shí),將 go 語言運(yùn)行時(shí)用 C++ 重寫了一遍, 讓你可以在 C++ 中使用 go 的風(fēng)格寫程序。

          平臺(tái)

          • Windows XP or later

          • OS X 10.8 or later

          • Linux 2.6.23 or later

          構(gòu)建

          • git clone --recursive https://github.com/cloudpeak/tin.git

          • mkdir build

          • cd build

          • Visual Studio 2015 Win64

            • cmake -G "Visual Studio 14 2015 Win64" ../tin -DCMAKE_BUILD_TYPE=RELEASE

          • Visual Studio 2015 Win32

            • cmake -G "Visual Studio 14 2015" ../tin -DCMAKE_BUILD_TYPE=RELEASE

          • Visual Studio 2008 Win32

            • cmake -G "Visual Studio 9 2008" ../tin -DCMAKE_BUILD_TYPE=RELEASE

          • GCC or Clang

            • cmake ../tin -DCMAKE_BUILD_TYPE=RELEASE && make

          示例

          #include "tin/all.h"
          
          void HandleClient(tin::net::TcpConn conn) {
            // Set TCP Read Write buffer.
            conn->SetReadBuffer(64 * 1024);
            conn->SetWriteBuffer(64 * 1024);
          
            // user space buffer size.
            const int kIOBufferSize = 4 * 1024;
            scoped_ptr<char[]> buf(new char[kIOBufferSize]);
          
            // set read, write deadline.
            const int64 kRWDeadline = 20 * tin::kSecond;
            conn->SetDeadline(kRWDeadline);
            while (true) {
              int n = conn->Read(buf.get(), kIOBufferSize);
              int err = tin::GetErrorCode();
              if (n > 0) {
                conn->SetReadDeadline(kRWDeadline);
              }
              if (err != 0) {
                VLOG(1) << "Read failed due to: " << tin::GetErrorStr();
                // FIN received, graceful close, we can still send.
                if (err == TIN_EOF) {
                  if (n > 0) {
                    conn->Write(buf.get(), n);
                  }
                  conn->CloseWrite();
                  // delay a while to avoid RST.
                  tin::NanoSleep(500 * tin::kMillisecond);
                }
                break;
              }
              DCHECK_GT(n, 0);
              conn->Write(buf.get(), n);
              if (tin::GetErrorCode() != 0) {
                VLOG(1) << "Write failed due to " << tin::GetErrorStr();
                break;
              }
              conn->SetWriteDeadline(kRWDeadline);
            }
            conn->Close();
          }
          
          int TinMain(int argc, char** argv) {
            const uint16 kPort = 2222;
            bool use_ipv6 = false;
            tin::net::TCPListener listener =
              tin::net::ListenTcp(use_ipv6 ? "0:0:0:0:0:0:0:0" : "0.0.0.0", kPort);
            if (tin::GetErrorCode() != 0) {
              LOG(FATAL) << "Listen failed due to " << tin::GetErrorStr();
            }
            LOG(INFO) << "echo server is listening on port: " << kPort;
            while (true) {
              tin::net::TcpConn conn = listener->Accept();
              if (tin::GetErrorCode() == 0) {
                tin::Spawn(&HandleClient, conn);
              } else {
                LOG(INFO) << "Accept failed due to " << tin::GetErrorStr();
              }
            }
            return 0;
          }
          
          int main(int argc, char** argv) {
            tin::Initialize();
          
            // set logging level.
            logging::SetMinLogLevel(logging::LOG_INFO);
          
            // set max p count.
            tin::Config config = tin::DefaultConfig();
            config.SetMaxProcs(base::SysInfo::NumberOfProcessors());
          
            // start the world.
            tin::PowerOn(TinMain, argc, argv, &config);
          
            // wait for power off
            tin::WaitForPowerOff();
          
            // cleanup.
            tin::Deinitialize();
          
            return 0;
          }
          瀏覽 22
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产又爽又黄无码无遮挡在线观看 | 午夜艹逼 | 伊伊色综合| 国产精品欧美7777777 | 人人操人人网站大全 |