我必须开发windows服务,它将复制文件到不同的服务器。所以我必须使用多通道来完成这项任务。但我只需要启动3-4个线程。所以每当一个线程结束时,我必须启动新的线程,这样线程的数量应该保持在3或4,那么我该如何对其进行检查呢?请提供一些相关信息。
发布于 2010-07-23 22:20:18
这可能会给你一个起点。这个想法是使用阻塞队列,它将阻塞出队操作,直到有项可用。因此,您的工作线程将围绕一个无限循环,等待项目出现在队列中。您的主线程会将这些项排队到队列中。下面的示例使用.NET 4.0 BCL中的BlockingCollection类。如果您不能使用它,那么您可以从Stephen Toub's blog获得阻塞队列的实现。
Module Example
Private m_Queue As BlockingCollection(Of String) = New BlockingCollection(Of String)
Sub Main()
Dim threads(4) As Thread
For i As Integer = 0 To threads.Length - 1
threads(i) = New Thread(AddressOf Consumer)
threads(i).IsBackground = True
threads(i).Start()
Next
Dim files As IEnumerable(Of String) = GetFilesToCopy()
For Each filePath As String In files
m_Queue.Add(filePath)
Next
End Sub
Sub Consumer()
Do While True
Dim filePath As String = m_Queue.Take()
' Process the file here.
Loop
End Sub
End Module发布于 2010-07-23 19:51:55
为什么不重用这些线程而生成新的线程呢?除此之外,看看一种称为生产者/消费者队列的模式。生产者添加文件(它们的路径信息),消费者读取该文件并采取适当的操作(执行复制操作)
发布于 2010-07-23 19:50:50
我不知道VB,但我知道的所有其他语言都有这样的操作: join()。
int main(){
threadA.start();
threadA.join(); //here main() wait threadA end
threadB.start(); //what you want
}为not_vb感到遗憾。我写它是因为我希望在VB中有相同名称的相同函数。
https://stackoverflow.com/questions/3317798
复制相似问题