C++编程,线程中出错该如何返回?
我用receiveThread=(HANDLE)_beginthread(ReceiveData,0,0);来开辟线程的,请问ReceiveData函数中的错误该怎么处理...
我用
receiveThread = (HANDLE)_beginthread(ReceiveData, 0, 0);
来开辟线程的,请问ReceiveData函数中的错误该怎么处理?
因为beginthread函数要求ReceiveData是void ReceiveData( void *p) 的格式,
请问这种情况下,ReceiveData函数中的出错怎么返回呢? 展开
receiveThread = (HANDLE)_beginthread(ReceiveData, 0, 0);
来开辟线程的,请问ReceiveData函数中的错误该怎么处理?
因为beginthread函数要求ReceiveData是void ReceiveData( void *p) 的格式,
请问这种情况下,ReceiveData函数中的出错怎么返回呢? 展开
3个回答
展开全部
ReceiveData是线程执行函数,在函数中如果出错,你可以结束线程 _endthread(线程退出码),然后GetExitCodeThread(线程句柄,存储退出码的变量地址DWORD *型)获取线程退出码,从而判断错误。另外你也可以把_beginthread的第3个参数设置成一个变量的地址如:
int error=0;
_beginthread(ReceiveData, 0, (void *)&error);
然后在ReceiveData(void *p)
{
int *perror=(int *)p;
}就可以设置error的值,你可以检测error的值来判断错误。
int error=0;
_beginthread(ReceiveData, 0, (void *)&error);
然后在ReceiveData(void *p)
{
int *perror=(int *)p;
}就可以设置error的值,你可以检测error的值来判断错误。
展开全部
线程函数不需要返回,你如果要在线程函数里面做错误处理,就用try..catch
线程函数就像主函数,主函数里面返回-1,系统也只能提示错了,然后结束。
线程函数里面某个地方如果错了,你就不要返回,直接抛出错误,(try catch) ,或者将线程结束
线程函数就像主函数,主函数里面返回-1,系统也只能提示错了,然后结束。
线程函数里面某个地方如果错了,你就不要返回,直接抛出错误,(try catch) ,或者将线程结束
追问
请问 如果try catch 都放在线程里面吗?
能不能再线程里面 throw 在抛出线程的函数里面 catch?
追答
我对try catch 不太熟,不过throw出的异常通常是由上面的程序处理,就像主函数抛出异常,是操作系统处理,还有一种方式,就是设置线程退出码,在结束线程后由系统处理。由于线程是和主函数(进程)共享资源的,所以线程里面有什么错误,你用主函数的某个全局变量记录,主函数再用一个线程专门处理这个错误,可以不?不过要记住并发控制。所以你不需要通过线程返回来处理错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面是msdn的说明:
If (_beginthread) successful, it returns a handle to the newly created thread; however, if the newly created thread exits too quickly, _beginthread might not return a valid handle .
_beginthread returns -1L on an error, in which case errno is set to EAGAIN if there are too many threads, to EINVAL if the argument is invalid or the stack size is incorrect, or to EACCES in the case of insufficient resources (such as memory).
另外,线程根据优先级,获得cpu时间片,接下来,你懂得!
If (_beginthread) successful, it returns a handle to the newly created thread; however, if the newly created thread exits too quickly, _beginthread might not return a valid handle .
_beginthread returns -1L on an error, in which case errno is set to EAGAIN if there are too many threads, to EINVAL if the argument is invalid or the stack size is incorrect, or to EACCES in the case of insufficient resources (such as memory).
另外,线程根据优先级,获得cpu时间片,接下来,你懂得!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询