线程创建与启动一次问题

yuanjilai 2011-11-03 09:49:01
我现在有一个存数据包的线程,每收到一个数据包就用_beginthreadex创建一个线程,导致在任务管理器中PID达到了百万级。

所以我在想,只创建一个线程,然后来了一个包就启动线程存储,而不是像上面那样每个包都创建一个线程。

有什么好的策略吗?
...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanjilai 2011-11-03
  • 打赏
  • 举报
回复
有木有人帮我改下上面的程序?

不需要每次创建一个线程,而是只用一个线程
yuanjilai 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 skyworth98 的回复:]

...........
重点在第一个帖子....
后面的只不过是我疑惑的地方罢了
[/Quote]


#include <stdio.h>
#include <iostream.h>
#include <windows.h>
#include <process.h>

int i;
FILE *fp;

unsigned __stdcall SaveFile(LPVOID lpParam)
{
fprintf(fp,"%d\n",i);
return 0;
}

int main()
{
fp = fopen("write.txt","w");
HANDLE hSaveFile;
unsigned int dwSaveFileID;
for ( i = 1; i < 1000000; i ++)
{
hSaveFile = (HANDLE)_beginthreadex(NULL,0,SaveFile,NULL,0,&dwSaveFileID);
}

return 0;
}


我写了测试用的程序,多运行几次系统就崩溃了,运行其他程序,就会弹出超出系统资源,进程分配失败等等。。。。可以实验下
skyworth98 2011-11-03
  • 打赏
  • 举报
回复
...........
重点在第一个帖子....
后面的只不过是我疑惑的地方罢了
yuanjilai 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skyworth98 的回复:]

另外,创建线程跟进程的数量有什么关系??
而且我不觉得有哪个个人系统目前可以创建百万级的进程或者线程.

pid/tid只不过是个随机数
[/Quote]
肯定是有关系的,就算系统能创建再多线程或者进程,终归不是一个好的方法,浪费系统资源

情况跟上面指出的博文 情况类似,肯定有方法解决
yuanjilai 2011-11-03
  • 打赏
  • 举报
回复
http://hi.baidu.com/luoyuonline/blog/item/74e93db2d4a6b8add8335a23.html
情况和这篇博文类似,就是不知道C++里面用什么函数
skyworth98 2011-11-03
  • 打赏
  • 举报
回复
另外,创建线程跟进程的数量有什么关系??
而且我不觉得有哪个个人系统目前可以创建百万级的进程或者线程.

pid/tid只不过是个随机数
skyworth98 2011-11-03
  • 打赏
  • 举报
回复
创建一个数据包队列,有数据包近来就加进队列.
创建一个(或者多个线程)监视队列,在队列不空的时候就从队列中抽取数据包来处理,如果队列为空则等待.
skyworth98 2011-11-03
  • 打赏
  • 举报
回复
用了_beginthreadex就一定要用_endthreadex来结束线程
qq120848369 2011-11-03
  • 打赏
  • 举报
回复
为什么非得一个包一个线程,提前开好几个worker线程,将包push给它们去处理。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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