我应该在我的库中使用线程吗
Should I use thread in my library?
我正在库中实现一个函数,这需要一段时间(最多一分钟)。它初始化了一个设备。现在,通常任何长函数都应该在自己的线程中运行,并在完成时向主线程报告,但我不确定,因为这个函数在库中。
我的困境是,即使我在一个单独的线程中实现了这个,应用程序中的另一个线程也必须等待它。如果是这样,为什么不让应用程序在那个线程中运行这个函数呢?
我可以将队列或邮箱传递给库函数,但我更喜欢一种更简单的机制,即库可以在VB、VC、C#或其他windows平台中使用。
或者,我可以传递窗口的HWND,库函数可以在它完成时向它发布消息,而不是用信号通知任何事件。如果我必须在它自己的线程中实现函数,那么这似乎是最实用的方法。这合理吗?
目前我的功能原型是:
void InitDevice(HANDLE hWait)
当初始化完成时,I信号CCD_ 1。这很好,但当另一个辅助线程将不得不等待InitDevice
时,我不相信我无论如何都应该使用线程。我应该通过HWND
吗?这样,消息将被发布到主线程,并且它将在多线程中更有意义。
通常,当我编写库代码时,除非真的有必要,否则我通常会尽量避免创建线程。通过创建线程,您在应用程序上强制使用特定的线程模型。也许他们希望从一个非常简单的命令行工具中使用它,其中单个线程是可以的。或者,他们可以从GUI工具中使用它,因为它必须是多线程的。
因此,只需让库用户了解函数调用是一种长期的阻塞调用,一些用于监控进度的回调机制,最后是一种立即停止操作的方法,可以由多线程应用程序使用。
所做的想要声称的是线程安全。如果有其他函数可以调用以影响阻塞函数的操作,请使用互斥对象来保护数据项。
相关文章:
- 线程之间的布尔停止信号
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 如何从线程中的不同模块调用函数?
- 我可以计算多线程数的平均值吗?
- 为什么我的 std::atomic<int> 变量不是线程安全的?
- 我怎么知道C++编译器是否制作线程安全的静态对象代码
- 睡眠:(睡眠或usleep)并没有将我的线程中的所有内容悬挂在Linux中,而是在Windows中悬挂吗?为什么
- 我可以在没有静音的线程中读取线程中的bool变量
- 当我从C#代码调用C++代码时,它是线程安全的吗
- 我需要保护一个由一个线程编写并由多个线程读取的变量吗
- 在 C++ 中易变:我是否应该定义一个可能被几个线程更改的变量作为易失性
- 对我来说,使 boost::statechart::state_machine 线程安全的最简单方法是什么?
- c ++ 为什么我的日期解析不是线程安全的
- 我知道 pantheios 是线程安全的,但它是进程间安全的吗?
- 多线程:我需要用只读方法保护我的变量吗
- 我可以挂起除一个线程外的进程吗?
- 我可以制作一个线程安全的 std::atomic<vector<int>>吗?
- 我如何使任何c++库都是线程安全的
- 我需要并行化或多线程我的应用程序
- 如果我只需要变量在其他线程中的值,我应该在一个线程中锁定变量吗?如果我不需要它为什么它有效?