在msvc上,如果您尝试加入不可连接的线程,它将调用中止。因此,您必须在调用join之前检查线程是否可连接,但这本身就是竞争条件。
void BaseThread::join()
{
auto thread = m_pPrivates->m_pThread;
if (!thread)
return;
if (thread->get_id() != std::thread::id() && thread->joinable())
thread->join();
}
Run Code Online (Sandbox Code Playgroud)
如果线程不可连接,或者是否有更好的方法可以阻止运行时调用异常终止?
。
。
。
编辑:
因此,这是在Visual Studio运行时处理线程关闭的功能。
int _Thrd_join(_Thrd_t thr, int *code)
{ /* return exit code when thread terminates */
unsigned long res;
if (WaitForSingleObject(thr._Hnd, INFINITE) == WAIT_FAILED || GetExitCodeThread(thr._Hnd, &res) == 0)
return (_Thrd_error);
if (code)
*code = (int)res;
return (CloseHandle(thr._Hnd) == 0 ? _Thrd_error : _Thrd_success);
}
Run Code Online (Sandbox Code Playgroud)
最后一行(CloseHandle)抛出此异常:
Unhandled exception at 0x7750BCEC (ntdll.dll) in desura.exe: 0xC0000008: An invalid …Run Code Online (Sandbox Code Playgroud) 我正在编写一个应用程序,为需要将数据保存到程序文件(对于相关程序)的程序下载和安装插件.现在这在xp和vista上工作正常,uac已禁用,但由于虚拟文件夹,它在普通vista上失败.
如果每次应用程序启动时都需要请求管理员权限,那么如何解决这个问题呢?
Ps程序是用c ++编写的,相对于2005年
编辑:文件系统虚拟文件夹:http://www.codeproject.com/KB/vista-security/MakingAppsUACAware.aspx
我正在编写一个从网上下载信息的程序,其中一部分是图像.
目前我遇到了问题,因为下载图像的代码与显示它们的代码不同(在mvc下).如果发布了404或者图像下载以某种方式失败,则显示代码弹出消息支持,我想避免.
有没有简单的方法来检查图像是否有效?我只关心jpg,gif和png.
注意:我不关心读取图像数据,只是为了检查它是否是有效的图像格式.
对于我的异常类,我有一个具有多个参数(...)的构造函数,它在windows下工作正常,但是在linux下它编译得很好但是拒绝链接到它.
为什么这不能在linux下运行?
这是一个例子:
class gcException
{
public:
gcException()
{
//code here
}
gcException(uint32 errId, const char* format = NULL, ...)
{
//code here
}
}
enum
{
ERR_BADCURLHANDLE,
};
Run Code Online (Sandbox Code Playgroud)
.
编辑
所以,当我这样称呼时:
if(!m_pCurlHandle)
throw gcException(ERR_BADCURLHANDLE);
Run Code Online (Sandbox Code Playgroud)
我得到这个编译错误:
error: no matching function for call to ‘gcException::gcException(gcException)’
candidates are: gcException::gcException(const gcException*)
gcException::gcException(gcException*)
gcException::gcException(gcException&)
Run Code Online (Sandbox Code Playgroud) 对于我正在构建的应用程序,我使用activex即控件.它工作很好但我不知道如何删除它周围的边框.
我试过覆盖调用调用并将DISPID_BORDERSTYLE设置为零,但看起来它永远不会被击中.
有任何想法吗?