首页 > 解决方案 > C++ 如何检测它正在运行的当前线程?

问题描述

我正在使用 Flutter for Desktop,并且正在从单独的线程调用引擎上的方法。我收到此错误:

[FATAL:flutter/shell/common/shell.cc(808)] Check failed: task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread(). 

这来自这一行:

https://github.com/flutter/engine/blob/master/shell/common/shell.cc#L836

我确认当我从创建引擎的同一线程调用该方法时不会发生错误。

所以错误告诉我我需要从创建引擎的同一线程调用此方法

那么C++如何知道哪个线程正在调用一个方法呢?

我追踪了task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread()电话,结果是这样的:

https://github.com/flutter/engine/blob/master/fml/task_runner.cc#L41

但我不明白发生了什么。

所以,把事情放在简单的代码中,假设我们有:

class Object{
public:
  void run() {
  //how can this run function know it's being called by t thread instead of main's thread?
  }
}


int main() {
  Object obj;
  std::thread t (obj.run);
  RunLoop();
}

标签: c++flutter

解决方案


大多数支持多线程的操作系统都有系统调用来获取当前线程的线程 ID。

Linux

视窗

这被标准化为C++11中的跨平台解决方案


推荐阅读