关于线程ctrl+c终止的问题

worldcup 2005-01-30 06:03:47
DWORD WINAPI AThread(LPVOID lparam)
{
while(1)
{
.....//没有任何退出条件,只是循环等待
}

funA();
return 0;
}

CreateThread(NULL,NULL,AThread,(LPVOID)argu,0,&threadId);


主程序启动线程AThread()后处于等待状态,我用ctrl+c强制退出,线程AThread也就退出了,
不执行funA(),但我还想在ctrl+c后运行其中的funA();请问该如何实现,谢谢!!


...全文
411 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldcup 2005-02-01
  • 打赏
  • 举报
回复
to LongLongAgoImBoy:
谢谢!我ctrl+c退出的是我的程序,并不用关闭cmd.exe
Jimmy_Xia 2005-02-01
  • 打赏
  • 举报
回复
以下是自己的猜测,没有根据,仅供参考!
主程序是运行在cmd.exe下的,当cmd.exe 接收等到ctrl+c消息后表示要强制关闭cmd.exe进程,那么相应的由它起的进程也会强制退出。
等待高人的回答!
worldcup 2005-02-01
  • 打赏
  • 举报
回复
谢谢大家!
to ukyo1:
"主线程准备退出时,设置A并等待其他线程退出"
我想如果是ctrl+c强制退出,系统不会给你准备的时间,也就不会让你"设置A"!
我在main()的最后加了:while(1) printf("a");
ctrl+c退出时根本不执行!
不知我说的对不对???
yuhan_0110 2005-02-01
  • 打赏
  • 举报
回复
楼主的想法是不行的,ctrl+c是退出了你的程序,但是在退出主线程时,系统会先强行退出工作线程,当然不会执行这个函数funA()了
  • 打赏
  • 举报
回复
我想你的意思是说在主线程里创建线程Athread,然后Athread等待主线程退出后再执行FunA做清理工作对不对?在Windows中,一旦主线程退出,其他所有线程都会被强行中止,不会继续执行下去的,所以你的程序无法通过,我想下面的方法也许有用:
设置一全局标志,假设为A,
主线程不要等待其他线程执行结束,而是独立执行
主线程准备退出时,设置A并等待其他线程退出
子线程:
在每次循环中都检查标志A,如果被设置则中止循环,执行清理动作并退出。
DentistryDoctor 2005-01-31
  • 打赏
  • 举报
回复
怎么会没有结束条件呢?
worldcup 2005-01-31
  • 打赏
  • 举报
回复
谢谢sharkhuang!
"起2个进程就可以吧"什么意思?不是2个线程吧?
sharkhuang 2005-01-31
  • 打赏
  • 举报
回复
起2个进程就可以吧
worldcup 2005-01-31
  • 打赏
  • 举报
回复
谢谢qrlvls!
这样的话,return 0也就执行不到了,是不是会造成线程资源不释放?还是没有任何影响?
qrlvls 2005-01-30
  • 打赏
  • 举报
回复
这个结构是无法实现的,只有修改你线程函数的现有结构

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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