存档

2019年5月 的存档

关于 enable_shared_from_this

2019/05/16 4,668

一. 引入

简单地说: enable_shared_from_this 是为了解决 在类的内部获取自己的 shared_ptr 这件事情而存在的。

众所周知, 每一个对象都能通过this 指针来访问自己的地址。this 指针也是所有成员函数的隐含参数。然而有些时候,我们需要的不仅是 this,而是一个 "this的智能指针"。

这里有一个常见的场景:

代码如上:在异步方法 DoSth_Async() 中调用了成员方法 OnDo(bool) . 这里存在一个问题: 当 OnDo() 被调用的时候,该类的是否还在生存中:

智能指针 ptr 在出作用域后立即被释放。所以当 OnDo() 被调用的时候,其所在的对象实际已经被释放了。如果确保在 OnDo() 被调用的时候,该对象仍然在生命周期内呢?一个方便的方法便上在构建线程的时候,将该对象的 shared_ptr 传入到线程。在该线程的生命周期内,该对象就会一直存在。这是一种利用 shared_ptr 的 保活机制

继续阅读

使用 Windows API 设置 IE 代理

2019/05/06 4,077

设置 IE 代理有多种方法。常用的是修改注册表和调用 InternetSetOption API 。

1. 注册表

IE 设置在注册表中所在的位置是
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
其中:

  • ProxyServer
    Value Type: REG_SZ
    Value Data: “ProxyServerName:Port”
  • ProxyEnable
    Value Type: REG_DWORD
    Value Data: 0 = Disable 1 = Enable
  • ProxyOverride 不使用代理的地址的列表
    Value Type: REG_SZ
    Value Data: “list_of_exclusion” 。可以使用通配符 * . 使用分号 ; 分隔, 如 192.168.1.*;*.domain.com;<local>

2. 使用 Windows API

示例代码如下 :

关于更多的信息请 参考这里 docs.microsoft.com

3.Others

a. 注意事项

在 IE9 之前, 以上步骤之后可能需要重启 IE 才能使设置生效。或者在打开 "Internet 属性" 面板时设置不生效。此时需要:

来通知其它应用IE属性被修改。

b. 打开 "Internet 属性" 设置面板

Rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4
Rundll32 可以做很多事情。具体可以看这里 List of Rundll32 Commands in Windows 10