多线程的关闭问题?想想办法,急

土豆薯条 2003-05-21 10:50:45
我的程序:
//按键开始
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char ip[16];
char port[5];
char num[2];
memset(ip,0,sizeof(ip));
memset(port,0,sizeof(port));
memset(num,0,sizeof(num));

Start *nall1=new Start(ip,port,num,true);
nall1->Resume();
nall1->Terminate();
}
我想能让我按键结束??????
//按键结束
void __fastcall TForm1::Button2Click(TObject *Sender)
{
nall1->Terminate(); //这样是不行的
Close();
}
请问该怎么办??
...全文
14 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SharpKing515 2003-05-22
  • 打赏
  • 举报
回复
nall1->Resume();
nall1->Terminate();//这是干嘛啊???不太懂。。。
土豆薯条 2003-05-22
  • 打赏
  • 举报
回复
还有没有方法?
genliter 2003-05-22
  • 打赏
  • 举报
回复
->Terminate();只是个标志而已,并不执行具体的关闭操作,只有等待线程手头的任务全部完成后,检验此标志,才作出停与不停的操作。
所以建议直接挂起,suspend。
yesry 2003-05-22
  • 打赏
  • 举报
回复
这又是什么原因?
土豆薯条 2003-05-22
  • 打赏
  • 举报
回复
但我把nall1设置成全局变量时,会出错
yesry 2003-05-22
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char ip[16];
char port[5];
char num[2];
memset(ip,0,sizeof(ip));
memset(port,0,sizeof(port));
memset(num,0,sizeof(num));

Start *nall1=new Start(ip,port,num,true);//这是局部变量
nall1->Resume();
nall1->Terminate();
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
nall1->Terminate(); //不能引用Button1Click()的局部变量
Close();
}


zihan 2003-05-22
  • 打赏
  • 举报
回复
nall1->Resume();是一个启动线程的函数,
如果你创建的是一个多线程,我建议你最好把线程的句柄保存起来,然后结束的时候你可以用
TerminateThread(Handle)来结束相应的线程,
nall1->Terminate();//是结束这个线程的意思
pp616 2003-05-22
  • 打赏
  • 举报
回复
强制关闭线程用TerminateThread函数
KingOf007 2003-05-21
  • 打赏
  • 举报
回复
在线程的Execute中加入一个判断
if(KeyPress==true)
this->Terminate();
然后就可以:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
KeyPress=true;
Close();
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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