无法继续创建线程

super_pi 2010-02-06 09:45:51
program thread;
uses
windows;
var tport:word;
i,j:word;
hc,s:handle;
procedure hchc(p:pointer);stdcall;
begin
WaitForSingleObject(hc,INFINITE);
j:=j+1;
writeln(j);
ReleaseMutex(hc);
end;
begin
hc:=CreateMutex(nil,true,'aaa');
for i:=1 to 256 do
begin
CreateThread(nil,0,@hchc,@i,0,ThreadID);
end;
while j<>256 do
begin
end;
WaitForSingleObject(hc,INFINITE);
writeln('xxxxxxxxxxx');
ReleaseMutex(hc);
CloseHandle(hc);
readln;
end.
不是每次都能创建256,再多点也不行了,为什么,是不是没设置好
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dd_zhouqian 2010-02-08
  • 打赏
  • 举报
回复
引用 3 楼 kfcoffe 的回复:
引用 2 楼 dd_zhouqian 的回复:
你这个是线程函数里创建线程,感觉是个递归

还有进程的线程数是有限制的。


何来递归? 他这个是个控制台程序吧!感觉lz写的这个程序永远不会输出东西!呵呵。

看错了,代码写的有些乱
super_pi 2010-02-08
  • 打赏
  • 举报
回复
还有问下,怎么确定所有线程都已退出?如果关掉这个窗口会把所有线程退掉吗?每个线程执行完了就会自动退出吧?谢谢
super_pi 2010-02-08
  • 打赏
  • 举报
回复
谢谢大家,有什么不规范的地方麻烦指正,还有,我发现不同电脑创建的线程数目是不一样,是不是跟cpu有关,那s扫描器问什么能有1024的线程?
gyk120 2010-02-06
  • 打赏
  • 举报
回复
具体表现在哪里?报错?还是单纯的不能继续创建,有什么提示?
chhrsas 2010-02-06
  • 打赏
  • 举报
回复

改一下试试。

if WaitForSingleObject(hc,INFINITE) = WAIT_OBJECT_0 then
begin
j:=j+1;
writeln(j);
end;


返 回 值                             含   义
WA I T _ A B A N D O N E D 指定的对象是互斥对象,并且拥有这个互斥对象的线程在没有释放此对象之
前就已终止。此时就称互斥对象被抛弃。这种情况下,这个互斥对象归当前线
程所有,并把它设为非发信号状态
WA I T _ O B J E C T _ 0 指定的对象处于发信号状态
WA I T _ T I M E O U T 等待的时间已过,对象仍然是非发信号状态
kfcoffe 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dd_zhouqian 的回复:]
你这个是线程函数里创建线程,感觉是个递归

还有进程的线程数是有限制的。
[/Quote]

何来递归? 他这个是个控制台程序吧!感觉lz写的这个程序永远不会输出东西!呵呵。
dd_zhouqian 2010-02-06
  • 打赏
  • 举报
回复
你这个是线程函数里创建线程,感觉是个递归

还有进程的线程数是有限制的。

1,183

社区成员

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

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