线程池中一个线程完成任务后,如何更换参数处理下一个任务?

时间:2022-09-25 16:56:47
我写了一个函数处理txt文件,因为文件很多,cpu是4核的,所以希望用线程池来加快速度。

创建线程时可以传递txt文件名参数,当一个文件处理完后,到这里正确。

我SuspendThread起来,更换txt文件名,然后resumethread该线程。但不能正常运行。

下面链接中说:

ResumeThread 是将挂起的线程恢复,挂起线程的时候,只是不再给线程分配时间片。但是线程有保护现场的功能。ResumeThread以后,线程继续原来的工作,没有任何的影响。也不需要传递什么参数。原来是什么,现在还是什么。

唤醒时是从上次执行被挂起的地方开始执行的,又不是从线程开始部分执行的,这时线程时不可能接收新参数的
因此ResumeThread是不能带所谓的“参数”的,你不可能从一个函数中间开始带参数执行

http://topic.csdn.net/u/20090518/17/e2a55c5d-34f9-4978-bd49-a12480369f0e.html

而我恰恰需要更换参数,那么朋友们是如何操作的?

4 个解决方案

#1


可以在线程中循环处理txt。

当一个文件处理完后,发一个消息给主线程,设新的文件名。

#2


每个任务添加的时候带上对应的文件名,线程中来取这个数据处理

#3


如果TXT文件不是临时生成的话,事先用一序列保存所有的文件名,线程启动后直接从序列中读取文件处理,做好线程同步就没有问题
如果文件是实时生成的,那么另开一线程将文件名保存到序列中去

#4


听各位忠告,不用SuspendThread。
还是用原来的老办法,但把while+sleep等待,改为:WaitForSingleObject+Event  
 

#1


可以在线程中循环处理txt。

当一个文件处理完后,发一个消息给主线程,设新的文件名。

#2


每个任务添加的时候带上对应的文件名,线程中来取这个数据处理

#3


如果TXT文件不是临时生成的话,事先用一序列保存所有的文件名,线程启动后直接从序列中读取文件处理,做好线程同步就没有问题
如果文件是实时生成的,那么另开一线程将文件名保存到序列中去

#4


听各位忠告,不用SuspendThread。
还是用原来的老办法,但把while+sleep等待,改为:WaitForSingleObject+Event