【问题标题】:Error using pthread on Windows with Mingw使用 Mingw 在 Windows 上使用 pthread 时出错
【发布时间】:2015-11-23 17:28:52
【问题描述】:

我正在尝试在 Windows C 程序上使用线程,在 Eclipse 环境和 Mingw 上编译。

我还把-lpthread和-pthread放在编译命令上,并包含在程序中。

我根据我的逻辑在适当的地方调用了 pthread_create()、pthread_cancel() 和 pthread_exit()。

它总是按预期工作,但我的程序结束时说

此应用程序已请求运行时终止它 不寻常的方式。 请联系应用程序的支持团队了解更多信息。

有什么提示吗?我错过了什么吗?

更新

全局变量:

pthread_t thr;

启动函数内部:

pthread_create(&thr,NULL,ThrFunc,NULL);
pthread_join(thr,NULL);

内部ThrFunc

while (TRUE)
{
    // do something
    if (some other thing occurs)
       pthread_exit();
}

【问题讨论】:

  • 不看代码就无法判断。
  • 也许你在 pthread 从它的启动函数返回之前释放了它的资源?
  • 打电话给pthread_cancel()”让我感觉不舒服……
  • 到目前为止你展示的一切看起来都很好。 start 函数是什么?它是您应用程序的 main() 函数吗?你能加入mcve吗?
  • 这能回答你的问题吗? How to run pthreads on windows

标签: c pthreads mingw


【解决方案1】:

"此应用程序已请求运行时终止它 不寻常的方式。请联系应用程序的支持团队了解更多信息 信息。”

要解决这个问题,请查看this

或者

当您的应用程序调用 abort() 函数时,您将看到该错误。

From MSDN:

中止

中止当前进程并返回错误代码。

无效中止(无效);返回值

abort 不会将控制权返回给调用进程。默认情况下,它 终止当前进程并返回退出代码 3。

备注

默认情况下,中止例程打印消息:

"此应用程序已请求运行时终止它 不寻常的方式。请联系应用程序的支持团队了解更多信息 信息。”

但在您的情况下,您需要找出为什么 abort() 被调用。

【讨论】:

    【解决方案2】:

    解决了!

    AFAIK 在 Mingw 下没有适用于 Windows 的可移植 pthread 库。

    我使用 CreateThread() 解决了我的问题,并让 Mingw 使用 Windows 原生线程解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2013-10-03
      • 2013-04-16
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多