【问题标题】:How to create threads in VC++如何在 VC++ 中创建线程
【发布时间】:2010-10-05 01:13:59
【问题描述】:
  • Linux 下使用 C 编程时,我倾向于使用 POSIX Threads

  • 没有MFC

问题:

然后我将如何在 VC++ 中创建线程?

找到更多关于win32下线程的信息?

编辑:

  • 简图

我喜欢 stackoverflow - 适合学生的最佳资源!

问候

【问题讨论】:

    标签: c++ windows visual-studio-2008


    【解决方案1】:

    如果您正在寻找独立于平台的方法,请使用boost

    还有 beginthread() 和 beginthreadex() 函数。两者似乎都是对 Win32 API 的补充,从某种意义上说,在许多用例中,您仍然需要调用一些 Win32 函数(例如用于 beginthreadex 的 CloseHandle)。所以,如果你不太在意平台兼容性,不妨剪掉前戏,使用 CreateThread()。

    此处记录了 Win32 线程处理:http://msdn.microsoft.com/en-us/library/ms684852(VS.85).aspx

    [edit1] 示例:

    DWORD WINAPI MyThreadProc( void* pContext )
    {
        return 0;
    }
    
    HANDLE h = CreateThread( NULL, 0, MyThreadProc, this, 0L, NULL );
    WaitForSingleObject(h, TIME); // wait for thread to exit, TIME is a DWORD in milliseconds
    

    [edit2] CRT & CreateThread():

    每个 MSDN:

    可执行文件中调用 C 运行时库 (CRT) 的线程应使用 _beginthreadex 和 _endthreadex 函数进行线程管理,而不是 CreateThread 和 ExitThread;这需要使用 CRT 的多线程版本。如果使用 CreateThread 创建的线程调用 CRT,CRT 可能会在内存不足的情况下终止进程。

    【讨论】:

    • 不,不要剪掉前戏。 CreateThread() 不适合 C 运行时。
    • CreateThread() 很好——我不是在寻找独立于平台的
    • 对不起,我不是很清楚那里。看到这个问题stackoverflow.com/questions/331536/…
    【解决方案2】:

    Petzold 的 Programming Windows 和 Richter 的 Programming Applications for Windows. 尤其是关于该主题的一些好书,后者深入探讨了服务器端编程,例如线程和同步 API。

    编辑: 对于代码 sn-ps,Google 是您的朋友。例如This article 有一些最小的线程示例。

    【讨论】:

    【解决方案3】:

    您可以使用 CRT 函数 _beginthreadex() 或 Windows API 函数 CreateThread()。 _beginthreadex() 对于具有没有延迟初始化线程本地存储的 CRT 的早期版本的 VC++ 是必需的。 CreateThread() 至少在 VS2005 及更高版本中很好。

    【讨论】:

    • 有趣。您能否详细说明 TLS 的延迟初始化以及为什么 CreateThread 现在可以了?我一直使用 _beginthreadex 认为这是正确初始化 CRT 所必需的。
    • 这是一个死线程。你为什么不开始一个新的,比如“_beginthreadex() 还需要吗?”
    【解决方案4】:

    您不应使用原始 Win32 CreateThread() API。

    使用 C 运行时的 _beginthreadex(),以便运行时有机会设置自己的线程支持。

    【讨论】:

      【解决方案5】:

      您还可以查找_beginthread() 函数。它与 CreateThread() 有点不同,你应该在选择之前知道它们的区别。

      【讨论】:

        【解决方案6】:

        使用_beginthread()_beginthreadex() 创建一个新线程。不要使用 Win32 函数CreateThread()——它没有正确初始化 C 运行时的多线程方面。另见this question

        【讨论】:

          【解决方案7】:

          您可能想看看CreateThread() 函数。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多