主线程和插件中的线程
pthread in main and plugin?
我运行在 Ubuntu 14.04 上,编译并使用 gcc/g++ 进行链接。main 由大约 30 个文件组成,main 调用 20 个插件。我使用-pthread
作为编译器选项,我确实#include <pthread.h>
.我的问题是:
- 仅将 #include 放在 main 中就足够了,还是我必须将其放在属于 main 的所有文件中?我想答案也适用于插件。
- 我是否必须将所有插件 mains 放入 #include 并使用 -pthread 进行编译,即使它们不使用线程还是插件的调用已经是线程?
当您说"插件"时,您实际上是指"外部函数",即在给定的 C 源文件中使用但未定义的函数。
从代码调用任何外部函数时,至少需要声明该函数,以便编译器知道调用它的正确方法。 头文件通常包含那些需要的声明。
例如,如果要使用 strcpy
函数,则需要#include <string.h>
,因为该文件包含 strcpy
的声明。 如果在给定的 C 文件中的任何地方都没有调用 strcpy
(也没有在 string.h
中声明任何其他函数),则无需在该文件中#include <string.h>
。
同样,对于 pthread.h
,仅当您从该 C 源文件中调用 pthread_create
或该文件中声明的任何其他函数时,才需要包含它。
链接方面,如果链接在一起以创建可执行文件的任何源文件使用任何 pthread 函数,则需要在创建可执行文件时传递-pthread
。
这个问题有点模糊,30 个文件的"主要"看起来像"exe",即可执行程序和插件是共享的 lib 或 dll。似乎还想使您的项目多线程。如果它已经是一个多线程程序,那么使用 gdb(如果你在 linux 上)连接到它并使用"信息线程",它将列出线程或"cat/proc/[pid]/status |grep 线程",它将显示线程数。其中 pid 是正在运行的程序的进程 ID。
如果 -pthread 用作编译器选项,但如果它没有与 pthread lib 链接,即在你构建/制作程序中的某个地方应该有 -lpthread;那么你的程序不是多线程的,即使你包含头文件,因为没有使用线程 API。
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- 如何将带有缓冲区的对象从插件发送到节点线程安全
- 在另一个线程中调试插件
- 从多线程C++插件回调NodeJS Javascript函数
- 多线程插件体系结构中的共享、单侧可变状态
- 节点.js C++插件:线程
- 主线程和插件中的线程
- 多线程c++应用中的插件/模块通信方法