为什么我的线程执行时整个程序都死机,在线求救

asphp 2003-03-02 12:45:00
在TBackgroundCommThread中有
bool __fastcall TBackgroundCommThread::WaitResponse(double sec)
{
bool Cg=StatusCg;
Suspend();
time_t tm_start=time(NULL);
for (;difftime(time(NULL),tm_start)<sec;)
{
recvstr();
if(Cg!=StatusCg)//mobile have response
{
while (Suspended)
Resume();
return true;
}
this->WaitFor();
//receivestr
}
while (Suspended)
Resume();
return false;

}

rcvstr是没有问题的,for循环一开始就死机了,如execute函数则不死机

void __fastcall TBackgroundCommThread::Execute()
{
while (!Terminated)
{
recvstr();
// Sleep for a period of time, and then wake up and check the port again.
Sleep(100);
}
}
求解!!!
...全文
68 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sam200401 2003-03-05
  • 打赏
  • 举报
回复
在循环里加:Application->ProcessMessages();
mhappy 2003-03-03
  • 打赏
  • 举报
回复
跟我的程序查不多,不知道你干什么用的,不过我的没有死锁,:)

你的RVCSTR里面如何处理收到的内容? 最好不要直接操作VCL属性或方法,这里有可能出问题;其他不知道,用途不同不敢说。 建议子线程和主线程的通信采用消息,效果好一点

刚学线程,共同探讨~
l_clove 2003-03-03
  • 打赏
  • 举报
回复
在循环里加上Application->ProcessMessages();
不过,这不是解决问题的好办法
你的主线程似乎和你的线程发生了互锁的现象
NowCan 2003-03-03
  • 打赏
  • 举报
回复
WaitResponse在哪儿调用的?
asimpleman 2003-03-02
  • 打赏
  • 举报
回复
写的有点乱了,先理清关系

1、为什么要那么多while,suspend和resume,还有return和WaitFor
2、Cg的值在什么地方修改?
3、你在recvstr()中对端口的操作是怎么进行的?创建包柄时的属性设置也对程序有影响的

先仔细看看有关线程的书,一般C++Builder的编程技巧上对线程的使用说的太少了,例子本身都有不少问题的。

如果对线程不是很熟的话,不要轻易使用线程
wyofnudt 2003-03-02
  • 打赏
  • 举报
回复
recvstr()和别的线程是否存在资源冲突;
试试Synchronize

1,317

社区成员

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

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