小编Edw*_*sen的帖子

std::thread 不是全局变量,但在到达创建它的函数末尾时不会超出范围?

所以我遇到了一些似乎违背了目的std::thread或至少使它不那么方便的东西。

假设我想生成一个std::thread来执行一项任务一次,并且不想在那之后再次担心它。我thread在函数末尾附近创建了这个函数,因此std::thread在我的例子中,它很快就会超出范围,很可能在它thread仍在运行时。这会产生一些解决方案(或者至少我知道的)的问题。

我可以:

A)将其设置为std::thread全局变量,这样它就不会超出范围。

B) 调用join()std::thread违背了生成线程的目的。

还有其他更好的方法来处理这种情况吗?

c++ multithreading c++11 stdthread

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

如何计算位图大小?

开始研究专门针对Windows的屏幕捕获软件.在MSDN上查看捕获图像的示例时,我发现自己有点困惑.

当我提到不包含与实际文件相关联的标题等的位图的大小时,请记住.我在谈论原始像素数据.我本以为应该是公式(width*height)*bits-per-pixel.但是,根据示例,这是计算大小的正确方法:

DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;
Run Code Online (Sandbox Code Playgroud)

和或: ((width*bits-per-pixel + 31) / 32) * 4 * height

我不明白为什么有额外的计算涉及31,324.也许填充?我不确定,但任何解释都会非常感激.我已经尝试过谷歌搜索,但没有找到任何特别有用的结果.

c++ math winapi bitmap

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

Hostgator将PHP版本更新为7.1?

Hostgator客户支持绝对没用.我已经尝试了3天来更新我的PHP版本,所以我可以安装Laravel 5.6.我在cPanel中尝试了PHP Selector插件,这似乎是更新PHP版本的唯一方法.

即使在PHP Selector插件中将每个目录更新为7.1之后,它仍然无法正常工作.我在3天前打电话给技术支持,并与3位不同的代表进行了交谈,每个人都以迂回的方式告诉我,他们无能为力,并且尴尬地道歉.

然后我要求他们重置我的服务器,他们说我必须等待电子邮件确认,需要2天才能到达.将我的服务器重置为默认设置和默认文件.再次尝试PHP Selector没有运气.这位女士称之为客户支持,她告诉我她自己更新了,并等到最后看到它."它应该发生在任何一分钟." 没变.

我用SSH和php -v命令检查我的PHP版本.它总是说我有PHP 5.4并且在尝试使用composer create-project --prefer-dist laravel/laravel=5.6它时返回一个错误,我的PHP版本是5.4并且不兼容.

我不是在咆哮,我只是想解释一下我所尝试过的所有内容以及客户支持在这一点上的选择.

有没有人在Hostgator上更新PHP有任何个人经验?我有一个共享帐户.谢谢.

php laravel

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

如何将HWND转换为SDL_Window?

我正在制作一个SDL2应用程序来绘制一个单独的进程窗口.该过程不使用SDL,但我可以获得HWND进程窗口.是否有可能得到一个SDL_WindowHWND

windows winapi sdl-2

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

有没有理由不扩展std :: set来添加下标运算符?

std::set用来存储类的唯一实例.std::set没有重载的下标运算符,所以你不能这样做set[0].

我找到了一种方法:

auto myClass = *std::next(set.begin(), index);
Run Code Online (Sandbox Code Playgroud)

但是,我发现一遍又一遍地复制该代码是单调的.所以我决定只扩展std::set(class sset)并且只是重载其中的下标运算符会更方便.

template <class T>

class sset: public std::set<T>
{
public:
    T operator[](const uint32_t i) const
    {
        if(i <= (this->size()-1))
            return *std::next(this->begin(), i);
        else
            throw std::out_of_range("Index is out of range");
    }
};

int main()
{
    auto myClass = set[0]; //works and no exception thrown

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我实现了所期望的行为,但我发现必须有一个原因,标准不包括下标运算符.当然不只是懒惰.

是否有任何先例不利或可能出现的未来问题?

c++ class stdset extending-classes c++11

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