热情软件屋

 

SuspendThread函数是如何实现线程挂起的


编号:QA003888
建立日期: 2001年2月19日 最后修改日期:2001年2月19日
所属类别:

小虫:
    操作系统:Win 98
    编程工具:VC 6.0
    问题一
    我现在在编写一个用20个线程(其中有循环)分析数据的软件。在应用时发现效率特别低。但是用SuspendThread函数暂停部分线程时其它部分操作却偶尔出错。我想了解一下SuspendThread函数是如何实现线程挂起的。这种用停止部分线程来提高其它线程的效率的方法是否有效。谢谢!
    问题二
    我用ListBox显示多行内容滚动的数据,每一行数据都是逐个字的出现。在实现时发现ListBox闪烁太厉害了。不知有何方法可以改善?
    本人水平: 中级

回答:

    问题一的回答:
     SuspendThread 的原形是:DWORD SuspendThread(HANDLE hThread);它返回的是线程的前一个暂停记数.线程暂停的次数可以是MAXIMUM_SUSPEND_COUNT次(在WINNT.H中是127);SuspendThread与内核方式的执行是异步的,但是在线程恢复运行之前,不会发生用户方式的执行。调用SuspendThread必须小心,如果线程试图从堆栈中分配内存,那么该线程将在该线程上设置一个锁,当其他线程试图访问该堆栈时,这些线程的访问就被停止,直到第一个线程恢复运行,只有知道目标线程在干什么时,并且采取强有力的措施避免因暂停线程带耒的问题或死锁状态,SuspendThread才是安全的。
    问题二的回答:
    可以用多线程解结这个问题.如果要显示的内容很多,可用一个工作线程处理复杂的计算.或者,如果你是在OnPaint函数中往ListBox中添加内容的话,记得在末尾添加XXX::OnPaint()。

此问题由南方之鸣回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio