多线程应用的问题,急待解决????

zzuheyong 2004-08-15 06:27:15
我有一个多线程应用的问题,线程实现想移动短消息中心发送短信,当创建多个同样的线程实现同时发送时,程序运行出现了莫名其妙的停止,在调试环境下在没有任何异常的情况下,停止运行?有哪位见过似问题,帮我分析一下,我想了2周了,急得要疯了,快来帮忙啊!
...全文
200 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy2001 2004-09-14
  • 打赏
  • 举报
回复
gz
yesry 2004-09-14
  • 打赏
  • 举报
回复
楼主的言词没有告诉我们程序停得怎样?进程停?线程停?还是都处于阻塞状态?还是socket收发没有进行?等等,请说得清楚一点。
土著巫师 2004-09-14
  • 打赏
  • 举报
回复
1、在每个线程的Excute方法内部把资源new出来,而不是象你那样在主线程的for循环里生成;同样不要用主线程窗口Form1作为Owner,例:ADODataSet = new TADODataSet(null);在退出Excute方法前释放资源。
2、考虑到发送短消息是个频率很高的动作,所以可以考虑实现一个线程池,而不是每发送一个消息就生成一个线程,然后再释放掉。
3、最后考虑线程本身是不是存在其它访问资源出错的情况。
yesry 2004-09-14
  • 打赏
  • 举报
回复
CPU占有率如何?
cchao 2004-09-13
  • 打赏
  • 举报
回复
用API试试看吧
HANDLE handle;
DWORD WINAPI fun(void* para); //线程函数声明


{
... //执行线程
DWORD dw;
handle = CreateThread(0,0,fun,(void*)0,0,dw);
...
}

//线程函数实现
DWORD WINAPI fun(void* para)
{
...
return 0;
}
zzuheyong 2004-08-16
  • 打赏
  • 举报
回复
创建线程的代码如下:
for(int i=0;i<threadcount;i++)
{
ADODataSet[i] = new TADODataSet(Form1);
conn[i] = new TADOConnection(Form1);
conn[i]->LoginPrompt = false;
ADODataSet[i]->Connection = conn[i];
Client[i] = new TIdTCPClient(Form1);
Thread[i] = new ThreadSend(false,Client[i],conn[i],ADODataSet[i],getpass,i+1);
}//getpass是一个加密组件实例,i+1是线程编号
线程里用到TADOConnection,TADODataSet,TIdTCPClient,都不共享。
线程优先级分别设为spLowest,spLower,spNormal都没解决问题,不敢设为再高的了,不然机器就象死了一样。
-------xteaj能再说详细些吗?如会抢什么样的资源?什么内存会溢出
CB1013 2004-08-16
  • 打赏
  • 举报
回复
线程设置优先级.
  • 打赏
  • 举报
回复
我想应该是同步问题,如果两个线程同时发送短消息,争抢资源,导致阻塞或
内存溢出。
hy1080 2004-08-15
  • 打赏
  • 举报
回复
没开发过,帮顶

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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