繁体   English   中英

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

[英]Should I use thread in my library?

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

我的难题是,即使我在单独的线程中实现此功能,应用程序中的另一个线程也必须等待它。 如果是这样,为什么不让应用程序仍然在该线程中运行此功能呢?

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

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

目前,我的函数原型是:

void InitDevice(HANDLE hWait)

初始化完成后,我将发出bWait信号。 这可以正常工作,但是当另一个辅助线程必须在InitDevice上等待时,我不相信我应该使用线程。 我应该通过HWND吗? 这样,消息将被发布到主线程,并且在多线程处理中将更有意义。

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

所以,相反,只是给图书馆用户的理解是一个函数调用是一个长期的阻塞调用,一些回调机制来监控进度,最后一种方式立即停止这可能是由多线程应用程序中使用的操作。

什么想要求的是线程安全的 如果互斥锁可以调用其他功能来影响阻塞功能的运行,则可以使用互斥锁来保护数据项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM