把程序改成单线程后,发现慢了很多

sky_163 2013-09-22 08:49:29
为了解决程序假死问题, 把程序改成单线程后,结果发现慢了好几倍 ,该怎么解决
把FQListZuToTree()改成 CreateThread(NULL,0,FQListZuToTree,this,0,NULL);
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-09-23
  • 打赏
  • 举报
回复
profiler
sky_163 2013-09-22
  • 打赏
  • 举报
回复
引用 2 楼 Idle_Cloud 的回复:
信息太少了,不过可以肯定不是线程问题。
重新用原来的代码按上面的代码改成单线程的,还是存在同样问题, 运行效率慢了很多 麻烦看下 我这样改 哪里有问题(代码在4楼)
sky_163 2013-09-22
  • 打赏
  • 举报
回复
引用 3 楼 u011729265 的回复:
不要盲目的去修改,首先要找问题的根本原因所在。 单线程效率比多线程低,这也是多线程的存在的意义,不过也不是线程越多越好。
如果不用单线程程序会出现假死, 只是希望单线程的效率能很原来的效率差不多就行 。
sky_163 2013-09-22
  • 打赏
  • 举报
回复
以下是修改前后的代码,运行效率差了好多 没修改前的代码

void CData6Dlg::OnButDel()
{ 
FQListZuToTree();
}
CData6Dlg::FQListZuToTree()//将数组中成员加入的树中
{
	string str;
	for (int FQIdex=0;FQIdex<CPublic::FQListZu.size();FQIdex++)
	{
		HTREEITEM hRoot,hItem;  
		int TSXIndex;
		int TempCKH;
		itoa(FQIdex+1,chr,10);
		str="找到的分区"+str.append(chr)+":"+CPublic::FQListZu[FQIdex].FenQuGeShi;
		
		hRoot=m_TreeFile.InsertItem(str.c_str());  
	
		

		for (int SXIndex=0;SXIndex<CPublic::FQListZu[FQIdex].SXList.size();SXIndex++) 
		{	
			TSXIndex=SXIndex;
			TempLuJinZu.clear(); 
			TempLuJinZu.push_back(CPublic::FQListZu[FQIdex].SXList[TSXIndex].FileCangKaoHao); 
			 TempCKH=CPublic::FQListZu[FQIdex].SXList[TSXIndex].FuMuLuCangKaoHao; 
			hItem=hRoot;
			 while (TempCKH!=05) 
			{
				TempLuJinZu.push_back(TempCKH);
				TempCKH=CPublic::FQListZu[FQIdex].SXList[TempCKH].FuMuLuCangKaoHao; 
			 str="";
			 for (int a=0;a<TempLuJinZu.size();a++)
			{
			 hItem=TreeVisit(hItem, TempLuJinZu.size()-1-a,  FQIdex);
				
			}
	 
		} 
	} 
	AfxMessageBox("找完了");
}
改成单线程后的代码

DWORD WINAPI  FQListZuToTree(LPVOID lpParameter);
void CData6Dlg::OnButDel() 
{
   HANDLE hThread1;
   hThread1=CreateThread(NULL,0,FQListZuToTree,this,0,NULL);
   CloseHandle(hThread1);
}
DWORD WINAPI FQListZuToTree(LPVOID lpParameter)//将数组的成员加入的树中
{
	string str;
	CData6Dlg *p=(CData6Dlg *)lpParameter;
	 
	for (int FQIdex=0;FQIdex<CPublic::FQListZu.size();FQIdex++)
	{
		HTREEITEM hRoot,hItem;  
		int TSXIndex;
		int TempCKH;
		itoa(FQIdex+1, p->chr,10);
		str="找到的分区"+str.append(p->chr)+":"+CPublic::FQListZu[FQIdex].FenQuGeShi;
		
		hRoot=p->m_TreeFile.InsertItem("00"); 
		for (int SXIndex=0;SXIndex<CPublic::FQListZu[FQIdex].SXList.size();SXIndex++)
		{	
			TSXIndex=SXIndex;
			p->TempLuJinZu.clear();//清空临时路径组 防止累加
			p->TempLuJinZu.push_back(CPublic::FQListZu[FQIdex].SXList[TSXIndex].FileCangKaoHao);
			TempCKH=CPublic::FQListZu[FQIdex].SXList[TSXIndex].FuMuLuCangKaoHao;
			hItem=hRoot;
			 while (TempCKH!=05)
			{
				p->TempLuJinZu.push_back(TempCKH);
				TempCKH=CPublic::FQListZu[FQIdex].SXList[TempCKH].FuMuLuCangKaoHao;	
			}
			 str="";
			 for (int a=0;a<p->TempLuJinZu.size();a++)
			{
				 hItem=p->TreeVisit(hItem, p->TempLuJinZu.size()-1-a,  FQIdex);				
			}
		 
		}
	}
	AfxMessageBox("找完了");
	return 0;
}
军说网事 2013-09-22
  • 打赏
  • 举报
回复
不要盲目的去修改,首先要找问题的根本原因所在。 单线程效率比多线程低,这也是多线程的存在的意义,不过也不是线程越多越好。
Carl_CCC 2013-09-22
  • 打赏
  • 举报
回复
信息太少了,不过可以肯定不是线程问题。
sky_163 2013-09-22
  • 打赏
  • 举报
回复
之前没用单线程2秒就能完成的事,现在改成单线程要40秒才能完成

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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