小编Lod*_*dle的帖子

std :: thread join中的竞争条件

在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)

multithreading visual-studio c++11

3
推荐指数
1
解决办法
1078
查看次数

在vista中避免使用UAC

我正在编写一个应用程序,为需要将数据保存到程序文件(对于相关程序)的程序下载和安装插件.现在这在xp和vista上工作正常,uac已禁用,但由于虚拟文件夹,它在普通vista上失败.

如果每次应用程序启动时都需要请求管理员权限,那么如何解决这个问题呢?

Ps程序是用c ++编写的,相对于2005年

编辑:文件系统虚拟文件夹:http://www.codeproject.com/KB/vista-security/MakingAppsUACAware.aspx

c++ uac windows-vista

2
推荐指数
1
解决办法
1118
查看次数

检查有效图像

我正在编写一个从网上下载信息的程序,其中一部分是图像.

目前我遇到了问题,因为下载图像的代码与显示它们的代码不同(在mvc下).如果发布了404或者图像下载以某种方式失败,则显示代码弹出消息支持,我想避免.

有没有简单的方法来检查图像是否有效?我只关心jpg,gif和png.

注意:我不关心读取图像数据,只是为了检查它是否是有效的图像格式.

c++ image

1
推荐指数
1
解决办法
3257
查看次数

为什么构造函数中的Multi Args不能在linux下工作?

对于我的异常类,我有一个具有多个参数(...)的构造函数,它在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)

c++ linux variadic-functions

0
推荐指数
1
解决办法
185
查看次数

删除activex上的边框即控件

对于我正在构建的应用程序,我使用activex即控件.它工作很好但我不知道如何删除它周围的边框.

我试过覆盖调用调用并将DISPID_BORDERSTYLE设置为零,但看起来它永远不会被击中.

有任何想法吗?

c++ windows wxwidgets activex visual-studio-2008

0
推荐指数
1
解决办法
1957
查看次数