我正在将我的应用程序从 Linux 移植到 Windows。我对跨平台移植应用程序的艺术相当陌生。据我所知,Windows 本身并不支持 POSIX 线程实现。这是真的?我听说过一些 Windows 的 pthread 实现(包装器或其他东西),使用它们或使用 Windows 提供的 CreateMutex 和其他 API 会更好吗????有人请。用两个世界的优点和缺点启发我。一些关于移植的杂项提示会很好地配合答案。
提前致谢。
这一切都将是相同的东西(pthreads 只是要调用 EnterCriticalSection 等),所以如果你有一个 pthreads 包装器,你可能应该使用它,这样你就不必更改太多代码
这很好用:http: //sourceware.org/pthreads-win32/
它是 Windows 的 pthreads 库的一个端口。
你需要记住的一件事是这段代码的未来是什么。您是否计划将来在这两个平台上开发(和发布)?或者这是一个单向端口?
移植项目时最好的做法是尽可能减少对代码的实际更改。在您的情况下,这意味着使用 pthread 解决方案。话虽如此,如果您计划将其作为单向端口,那么本地化永远不会受到伤害。:)
我会花一些时间来全面检查这两种策略,然后实施你觉得最舒服的一种。
我要做的第一件事是在 Linux 下移植到 Boost Thread,而不是移植到 Windows。
为什么不两全其美,使用一个包含 pthread 和 Window API 的库,并在幕后使用适当的库呢?您的代码在两个平台上保持不变。
C++ 中不乏这样的库,所以我无法想象没有 C 版本。
在使用 CRT 的 Windows C/C++ 应用程序上,需要调用beginthread/beginthreadex以在新线程中正确初始化 CRT。