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

时间:2014-04-07 18:57:52

标签: c++ multithreading dll

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

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

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

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

目前我的函数原型是:

void InitDevice(HANDLE hWait)

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

1 个答案:

答案 0 :(得分:1)

一般来说,当我编写库代码时,我通常会尝试远离创建线程,除非它确实是必要的。通过创建线程,您可以在应用程序上强制使用特定的线程模型。也许他们希望从一个非常简单的命令行工具中使用它,其中单个线程很好。或者他们可以从GUI工具中使用它,其中必须是多线程的。

所以,相反,只是让库用户理解函数调用是一个长期的阻塞调用,一些回调机制来监视进度,最后一种方法来立即停止可以由多线程应用程序使用。

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