DLL里使用Sleep()是不是会把整个DLL停下?

hind24 2011-01-07 01:54:32
DLL里有一个导出函数,还有一个线程类。这个函数用于启动线程类的两个实例,两次启动都是用new的形式,之间用sleep延迟。
第一个线程的构造函数执行后再sleep,为什么连第一个线程也停下了?sleep不是只让调用它的线程停下吗?这样应该是调用DLL的VCL主线程停下,为啥把已经启动的别的线程也停下了呢?
...全文
161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hind24 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bigfog 的回复:]

楼主的描述就有问题,sleep只是将线程的控制权交出去
dll只是代码的容器
[/Quote]sleep不是把线程的控制权交出去,而是把线程挂起一段时间,不分配时间片
hind24 2011-01-07
  • 打赏
  • 举报
回复
我也认为会把调用DLL的VCL主线程暂停,但是为什么把已经从DLL启动的线程也暂停了?

伪代码如下:

启动函数()
{
启动线程1;
Sleep(10000);
启动线程2;
}

相同的启动函数和线程类,我直接放在窗体内执行就不会暂停已经启动的线程1,封装进DLL后经过动态调用就会停止已经启动的线程1。sleep在DLL内外,或者在VCL线程内外,执行起来为何有这个差异?
mjp1234airen4385 2011-01-07
  • 打赏
  • 举报
回复
会,而且会把调用dll的线程暂停。
bigfog 2011-01-07
  • 打赏
  • 举报
回复
楼主的描述就有问题,sleep只是将线程的控制权交出去
dll只是代码的容器

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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