很奇怪的问题

NewJerryj 2009-08-05 11:22:13
我使用多线程进行搜索,出现一个怪问题,大致代码如下:

DWORD WINAPI SearchThread(LPVOID lpParam)
{
while(true)
{
if(找到目录)
CreateThread(SearchThread..,lpParam ....); //找到目录,则传递目录参数创建一个新线程继续查找

else if(找到文件)
//get it
else
break;

}


}

为什么每次我都发现创建了两个目录参数一样的新线程,把第一个找到的目录参数丢弃了?
...全文
83 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xge 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 newjerryj 的回复:]
用多线程速度会快些吧,尤其是在现在多核平台下。

引用 2 楼 flyskytoday 的回复:
怎么感觉是用递归创建线程?
即使查找文件夹或文件,只要用一个线程就可以查找了
[/Quote]
所有的线程都在访问同一块硬盘,瓶颈在硬盘,而不是CPU. 多线成访问同一块硬盘只会造成硬盘性能的下降,因为有太多无谓的磁头移动和cache更新。
NewJerryj 2009-08-05
  • 打赏
  • 举报
回复
当新创建的线程搜索任务完成后,会让它自己结束。

[Quote=引用 4 楼 gordon3000 的回复:]
呵呵,2楼问的不是这个事儿。 :)
找到一个目录就创建一个新线程,那得多少啊。
[/Quote]
副组长 2009-08-05
  • 打赏
  • 举报
回复
呵呵,2楼问的不是这个事儿。 :)
找到一个目录就创建一个新线程,那得多少啊。
NewJerryj 2009-08-05
  • 打赏
  • 举报
回复
用多线程速度会快些吧,尤其是在现在多核平台下。

[Quote=引用 2 楼 flyskytoday 的回复:]
怎么感觉是用递归创建线程?
即使查找文件夹或文件,只要用一个线程就可以查找了


[/Quote]
flyskytoday 2009-08-05
  • 打赏
  • 举报
回复
怎么感觉是用递归创建线程?
即使查找文件夹或文件,只要用一个线程就可以查找了

NewJerryj 2009-08-05
  • 打赏
  • 举报
回复
但是如果我在CreateThread() 后,加个Sleep延时一下就正常了
NewJerryj 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ltqd2008 的回复:]
CreateThread(SearchThread..,lpParam ....); 
创建第一个线程后,这个线程可能还没有读取到 lpParam 所指向的内容便休眠了.
而在第一个线程休眠后,你再次调用CreateThread(SearchThread..,lpParam ....);  创建第二个线程,这时候,lpParam所指向的内容已经变成第二次的内容了,第一个线程这时候再读取lpParam指向的内容也就不正确了
[/Quote]

恩,有道理!
难怪我在创建线程后,加个Sleep,就一切正常了。这样可以让新创建的线程有足够时间去启动读取参数。
ltqd2008 2009-08-05
  • 打赏
  • 举报
回复
CreateThread(SearchThread..,lpParam ....);
创建第一个线程后,这个线程可能还没有读取到 lpParam 所指向的内容便休眠了.
而在第一个线程休眠后,你再次调用CreateThread(SearchThread..,lpParam ....); 创建第二个线程,这时候,lpParam所指向的内容已经变成第二次的内容了,第一个线程这时候再读取lpParam指向的内容也就不正确了
visualthinking 2009-08-05
  • 打赏
  • 举报
回复
线程结束怎样做的,如果来不及结束,有启动一个线程,或许分不到资源
stjay 2009-08-05
  • 打赏
  • 举报
回复
进行IO操作时,最多的线程有时并不显得高效

线程不是这样的分工的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧