vc6多线程程序在双核cpu下运行速度时快时慢,单核下没问题

wyb_lh 2008-06-13 10:20:17
vc6多线程程序在双核cpu下运行速度时快时慢,单核下没问题。单独运行程序速度很慢,但同时开启金山词霸或MediaPlay或大型软件或游戏,速度反而变快了。
...全文
339 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoteng1984 2008-07-20
  • 打赏
  • 举报
回复
同步没处理好,阻塞的时间太多
cppwin 2008-06-21
  • 打赏
  • 举报
回复
RecZerook 是全局的多线程共享的?
还是只在本线程 SI_Write()中修改的?
wooyz 2008-06-20
  • 打赏
  • 举报
回复
说错了,是期望用sleep来切换线程。但是,使用mutex,事实上,这种切换是不可能达到你的预期的。
wooyz 2008-06-20
  • 打赏
  • 举报
回复
感觉lz的代码是,使用sleep来进行计时。然后判断时间间隔是否达到30(也许是秒)。然后再把释放线程。
一个问题clock()东东是两个线程间全局公用的嘛?如果是,而使用mutex是会导致及时的同时进行,这样的话,你的程序当然不能严格保证你的30的约束条件。

你的这个设计个人认为是有问题的。
danscort2000 2008-06-20
  • 打赏
  • 举报
回复
我以前写的代码中也发生过这样的情况
应该是同步没有处理好
scq2099yt 2008-06-13
  • 打赏
  • 举报
回复
up
cnzdgs 2008-06-13
  • 打赏
  • 举报
回复
上面代码中哪些变量是多线程共享的?SI_Write函数是怎么写的?循环中Sleep的用意是什么?
wyb_lh 2008-06-13
  • 打赏
  • 举报
回复
你的意思是用SetThreadAffinityMask设置线程使用哪个cpu?能不能稍为详细一点,谢谢
zhoujianhei 2008-06-13
  • 打赏
  • 举报
回复
手动分配线程资源(绑定CPU)。
wyb_lh 2008-06-13
  • 打赏
  • 举报
回复
以下是我的采集线程的代码,帮忙看看有什么问题。注:在单核cpu下没有问题,只有双核时速度时快时慢!
WaitForSingleObject(mutex,INFINITE);
RecZerook=FALSE;
status = SI_Write(m_hUSB01, (LPVOID)(LPCSTR)dataZero, iwriteData, (LPDWORD)&written);
clkStart=clock();
for(;!RecZerook;)
{
clkEnd=::clock();
if(clkEnd-clkStart>30)
{
break;
}
Sleep(1);
}
ReleaseMutex(mutex);

WaitForSingleObject(mutex,INFINITE);

RecWorkok=FALSE;
status = SI_Write(m_hUSB01, (LPVOID)(LPCSTR)dataWork, iwriteData, (LPDWORD)&written);
clkStart=clock();
for(;!RecWorkok;)
{
clkEnd=::clock();
if(clkEnd-clkStart>30)
{
break;
}
Sleep(1);
}
ReleaseMutex(mutex);

WaitForSingleObject(mutex,INFINITE);
RecRefok=FALSE;
status = SI_Write(m_hUSB01, (LPVOID)(LPCSTR)dataRef, iwriteData, (LPDWORD)&written);
clkStart=clock();
for(;!RecRefok;)
{
clkEnd=::clock();
if(clkEnd-clkStart>30)
{
break;
}
Sleep(1);
}
ReleaseMutex(mutex);
KeSummer 2008-06-13
  • 打赏
  • 举报
回复
1:双核cpu但用一个核的时候,单线程的状况下本来就慢。因为目前双核CPU但个核的频率还是比较低的。
2:同步没处理好。

15,471

社区成员

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

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