使用CreateThread创建线程并在线程函数中使用了signal函数按Windows核心编程第5版中的说法进程应该会被终止但我看了createthread 和 signal 函数的代码 , 真的想不出哪些情况会导致进程结束。 有人能给出代码 , 用createthread 创建线程 , 调用signal , 然后程序会终止的例子
解决方案 »
- 请教,关于TCP NAT打洞问题?
- 在VC中使用LZMA算法压缩解压文件的问题。
- CreateMutex互斥量怎么是这样的呢.不明白
- 树形控件问题
- 请问有没有API函数可以知道鼠标当前选中的文字?比如在WORD,NOTEPAD里???
- 那里有单独的msdn中文版vc帮助,多谢!
- 各位大虾!问一个关于VC设置的问题,折磨人啊!
- 怎样在数据库里填入一段很长的文字?
- ??求救!还是关于vc和active 、com的问题
- 我编一个软件用到要存一些数据,但用数据库编程又使程序太大,能不能有方法。我要对数据进行查询。
- MFC非模态对话框MoveWindow或SetWindowPos后ListBox的滚动条不显示
- 谁能给我个建议,或者例子?
#include <Windows.h>
#include <signal.h>
#include <process.h>void SignalHandler(int signal)
{
printf("Application aborting...\n");
}DWORD WINAPI ThreadProc(LPVOID lParam)
{
int i = 0;
while(i++ < 50)
{
printf("%d\n", i);
Sleep(50); if(i >= 25)
{
typedef void (*SignalHandlerPointer)(int);
SignalHandlerPointer previousHandler;
previousHandler = signal(SIGABRT, SignalHandler);
abort();
}
}
return 0;
}void main()
{
HANDLE handle = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
WaitForSingleObject(handle, INFINITE);
CloseHandle(handle);
}
使用CreateThread创建线程并在线程函数中使用了signal函数按Windows核心编程第5版中的说法进程应该会被终止这里的终止应该是异常终止, 很多地方都说createthread不能与signal 混用 ,但不知为什么,而且我试过,用得很正常 , 我要的是一个不正常的代码
有两种方式创建线程。一种方法是使用CRT函数_beginthread或_beginthreadex(VC 2.0及以上版本);另一种方法是使用API CreateThread。所用的CRT函数(除signal)都能在通过_beginthread或CreateThread创建的线程中正确的运行, 然而在CreateThread创建的线程中使用CRT函数会引发一些问题。
事实上,的确有一些问题需要说说。如果线程使用了CRT的signal函数,整个进程都会被中止,因为结构化异常处理体尚未准备好
如果signal出现异常的话进程会被终止
如果没有异常也就没有问题
我在多说两句吧
windows操作系统有自己的一套结构化异常处理机制
当然C++本身也有一套异常处理机制
系统没启动一个进程或线程的时候会自动加上异常捕捉结构
进程比较好说了
通过入口函数做映射由系统统一处理
不过线程就不一样了
CreateThread是系统API
只会添加系统的异常处理
_beginthread是CRT函数
会添加CRT异常处理
所以核心编程会建议通过_beginthread启动线程
这样更稳定