我应该在我的库中使用线程吗

Should I use thread in my library?

本文关键字:线程 我的 我应该      更新时间:2023-10-16

我正在库中实现一个函数,这需要一段时间(最多一分钟)。它初始化了一个设备。现在,通常任何长函数都应该在自己的线程中运行,并在完成时向主线程报告,但我不确定,因为这个函数在库中。

我的困境是,即使我在一个单独的线程中实现了这个,应用程序中的另一个线程也必须等待它。如果是这样,为什么不让应用程序在那个线程中运行这个函数呢?

我可以将队列或邮箱传递给库函数,但我更喜欢一种更简单的机制,即库可以在VB、VC、C#或其他windows平台中使用。

或者,我可以传递窗口的HWND,库函数可以在它完成时向它发布消息,而不是用信号通知任何事件。如果我必须在它自己的线程中实现函数,那么这似乎是最实用的方法。这合理吗?

目前我的功能原型是:

void InitDevice(HANDLE hWait)

当初始化完成时,I信号CCD_ 1。这很好,但当另一个辅助线程将不得不等待InitDevice时,我不相信我无论如何都应该使用线程。我应该通过HWND吗?这样,消息将被发布到主线程,并且它将在多线程中更有意义。

通常,当我编写库代码时,除非真的有必要,否则我通常会尽量避免创建线程。通过创建线程,您在应用程序上强制使用特定的线程模型。也许他们希望从一个非常简单的命令行工具中使用它,其中单个线程是可以的。或者,他们可以从GUI工具中使用它,因为它必须是多线程的。

因此,只需让库用户了解函数调用是一种长期的阻塞调用,一些用于监控进度的回调机制,最后是一种立即停止操作的方法,可以由多线程应用程序使用。

所做的想要声称的是线程安全。如果有其他函数可以调用以影响阻塞函数的操作,请使用互斥对象来保护数据项。