简而言之,我正在寻找STLPort的替代品.STLPort有一段时间没有更新(自2008年以来?),并且缺乏C++ 11支持.有谁知道任何替代品?我需要使用各种工具链进行编译,适用于各种体系结构和各种目标操作系统.
我将开始研究GNU C++实现,看看它与GCC工具链的关系如何作为替代,并将回发结果.但如果有人在这里有任何前期知识,那将是伟大的.
替代方案是实现各种关键的C++ 11 STL功能,如新的智能指针类型和std :: threads.最糟糕的情况我可以从boost中提取智能指针.就pthreads或Windows线程而言,是否存在std :: threads的任何实现?
谢谢
我的应用程序上的状态栏有问题,它可以录音.我有
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Run Code Online (Sandbox Code Playgroud)
在我的plist中,以便在录制声音并且应用程序在后台时获取红色状态栏通知.但是,如果我停止录制并转到后台,状态栏仍然存在.我在运行4.3.2的iPad 2和运行5.0的iPhone4上看到过这种情况.我认为这是一个> OS4问题,因为我正确终止录制,似乎没有(认证)API来控制状态栏.
有人见过这个/知道如何解决它吗?我怀疑这可能是一个iOS错误,但需要先排除自己:)
到目前为止,我在网上看到的唯一一件事就是这个(未解决的)电子邮件线程:
http://web.archiveorange.com/archive/v/q7bub5A16vw9h9w2lw82
安德鲁
我一直在思考这两个函数的返回值。__sync_bool_compare_and_swap 函数的返回值似乎有明显的好处,即我可以用它来判断是否发生了交换操作。但是我看不到 __sync_val_compare_and_swap 的返回值的良好使用。
首先,让我们有一个函数签名供参考(来自 GCC 文档减去 var args):
type __sync_val_compare_and_swap (type *ptr, type oldval type newval);
Run Code Online (Sandbox Code Playgroud)
我看到的问题是 __sync_val_compare_and_swap 的返回值是 *ptr 的旧值。准确地说,它是在适当的内存屏障到位后通过此函数的实现看到的值。我明确指出这是为了满足这样一个事实,即在调用 __sync_val_compare_and_swap 和执行指令以强制执行内存屏障之间,*ptr 的值很容易改变。
现在,当函数返回时,我可以用那个返回值做什么?尝试将其与 *ptr 进行比较是没有意义的,因为现在可以在其他线程上更改 *ptr。同样,比较 newval 和 *ptr 也对我没有真正的帮助(除非我锁定 *ptr 这可能首先会破坏我对原子的使用)。
所以真正留给我做的就是询问是否返回值 == oldval,这实际上是(请参阅下面的警告)询问是否发生了交换操作。所以我可以只使用 __sync_bool_compare_and_swap。
我刚刚提到的警告是,我在这里看到的唯一细微差别是,这样做并没有告诉我交换是否发生,它只是告诉我在释放内存屏障之前的某个时刻 *ptr 具有相同的值为 newval。我正在考虑 oldval == newval 的可能性(尽管我很难找到一种有效实现该函数的方法,以便它可以首先检查这些值而不是交换它们是否相同,所以这可能是一个有争议的问题)。但是,我看不到在呼叫站点知道这种差异会对我产生影响的情况。事实上,我无法想象我会将 oldval 和 newval 设置为相等的情况。
我的问题是:
是否存在使用 __sync_val_compare_and_swap 和 __sync_bool_compare_and_swap 不等效的用例,即是否存在一种情况提供的信息多于另一个的情况?
在旁边
我考虑这个的原因是我发现了一个 __sync_val_compare_and_swap 的实现,它有一个竞争:
inline int32_t __sync_val_compare_and_swap(volatile int32_t* ptr, int32_t oldval, int32_t newval)
{
int32_t ret = *ptr;
(void)__sync_bool_compare_and_swap(ptr, oldval, newval);
return ret; …
Run Code Online (Sandbox Code Playgroud) 考虑结构:
struct mystruct { };
Run Code Online (Sandbox Code Playgroud)
这总是有效的:
constexpr mystruct mystructInstance = mystruct();
Run Code Online (Sandbox Code Playgroud)
即POD的值初始化是constexpr
?类似地,如果结构被定义为:
struct mystruct { ~mystruct(); };
Run Code Online (Sandbox Code Playgroud)
最后,这个怎么样:
struct mystruct { mystruct(); ~mystruct(); };
Run Code Online (Sandbox Code Playgroud)
我没有宣布ctr为constexpr,但有没有任何隐含的扣除规则可以保证这一点吗?
事先警告:出于好奇,我在这里乱砍.我没有具体的理由去做我正在做的事情!
下面是在做Python 2.7.13
对MacOS 10.12.5
我正在使用python进行攻击,我认为如果我进行stdout
非阻塞会发生什么事情会很有趣
fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
Run Code Online (Sandbox Code Playgroud)
打电话fcntl
肯定是成功的.然后我尝试写入大量数据(大于OSX上管道的最大缓冲区大小 - 这是65536字节).我以各种方式做到并获得不同的结果,有时是例外,有时似乎是一个很难的失败.
情况1
fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
try:
sys.stdout.write("A" * 65537)
except Exception as e:
time.sleep(1)
print "Caught: {}".format(e)
# Safety sleep to prevent quick exit
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
这总是抛出异常Caught: [Errno 35] Resource temporarily unavailable
.我觉得这很有道理.更高级别的文件对象包装器告诉我写入调用失败.
案例2
fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
try:
sys.stdout.write("A" * 65537)
except Exception as e:
print "Caught: {}".format(e)
# Safety sleep to prevent quick exit
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
这有时抛出异常Caught: [Errno 35] Resource temporarily …
Android 文档表明 Oreo 对后台执行有新的限制:https://developer.android.com/about/versions/oreo/background。这看起来很合理,他们的目标显然是让自己的平台更像 iOS,并防止应用程序在后台猖獗运行。
我不清楚(事实上,根本没有记录)是当 UI 转到后台时你可以在线程上做什么。具体来说,
鉴于我创建了一个线程
new Thread(() -> {
// Naughty thread doing something forever
}).start();
Run Code Online (Sandbox Code Playgroud)
我将应用程序发送到后台
那么...该线程会发生什么?
我创建了非常简单的代码来执行此操作,并且我的线程已经愉快地在 logcat 上运行了 10 多分钟,没有出现任何问题。
有谁有关于此类线程有哪些限制的明确信息?我本以为,由于 Android 限制了后台服务可以执行的操作,因此它也会限制此类线程可以执行的操作。
请注意,我们没有计划编写一个执行此类操作的应用程序。我们只是希望能够编写安全的代码,不会在较新版本的 Android 上引起问题。在 iOS 上,如果您进入后台,那么您将获得一段宽限期来完成您正在做的任何事情(并且您可以要求更多时间),但最终您的线程将被挂起。
在Google Play上更新我们的应用时,我得到了
You opted-in to Android TV but your APK or Android App Bundle does not have the Leanback intent
Run Code Online (Sandbox Code Playgroud)
这有点奇怪,因为我们在清单中有所有必需的组件来支持电视,即:
<uses-feature
android:name="android.software.leanback"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
Run Code Online (Sandbox Code Playgroud)
和
<activity
android:name=".MainActivity"
android:configChanges="orientation"
android:launchMode="singleTop"
android:screenOrientation="behind"
android:theme="@style/AppTheme.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
和
<application
android:banner="@drawable/tv_banner"
Run Code Online (Sandbox Code Playgroud)
(请注意,我们分享电视和手机之间的活动)
我们还包括以下gradle模块:
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:leanback-v17:27.1.1'
Run Code Online (Sandbox Code Playgroud)
该应用程序也适用于电视设备:)
现在,诚然,我们已经做了一个大的重构,所以我们的应用程序和清单的结构已经发生了很大变化.但是,我没有看到任何与Android开发文档中的要求相矛盾的内容:
https://developer.android.com/training/tv/start/start
有没有人经历过这个?或者,任何人都可以看到其他明显缺失/不正确的东西吗?
这个问题可能是一个很好的答案,但不幸的是我不知道正确的术语,所以......
template <class _Cp, bool _IsConst, typename _Cp::__storage_type = 0> class __bit_iterator;
Run Code Online (Sandbox Code Playgroud)
有人可以解释最后一个模板参数吗?我唯一可以推断的是,如果为_Cp指定的参数具有子类型__storage_type,那么模板中任何_Cp :: __ storage_type的使用都将解析为该.如果没有那么意味着_Cp :: __ storage_type解析为0?这对我来说似乎很不合适(或者经过一些实验后可能会出错).
将使用解释以及正确的术语和C++参考.
有兴趣的话,这段代码是从libc ++中提取的.
我本来只是为了 Safari 问这个问题。然而,我还没有找到 Edge、Opera、Safari 和 IE 的答案(尽管我认为后者可能不可能)。由于这个简单的问题似乎没有跳转的地方,我认为这可以全部放入一篇文章中。
问题:Edge、Opera、Safari 和 IE 可以吗?如果是这样,怎么办?
以下是Chrome和Firefox的代码供参考
# Chrome
options = selenium.webdriver.ChromeOptions()
options.add_experimental_option("prefs", {"download.default_directory": download_directory})
driver = selenium.webdriver.Chrome(chrome_options=options)
# Firefox
profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.dir", download_directory)
driver = webdriver.Firefox(firefox_profile=profile)
Run Code Online (Sandbox Code Playgroud)
请注意,如果可以通过其他一些语言绑定实现,那么我确信它是通过 python 实现的。因此,请随意发布非 python 解决方案,一旦我得到提示,我就会翻译!
aarch64体系结构没有多个存储和加载的指令,即armv7 arch没有等效的stm和ldm.相反,您必须使用stp和ldp指令来存储和加载寄存器对.
参考ARM参考手册:
没有多个寄存器LDM,STM,PUSH和POP指令,但是可以使用非连续寄存器对的加载存储.
我的问题是,非连续意味着什么意思或指的是什么?我的即时反应是,这意味着你不能在这些命令中使用连续编号的寄存器,例如
stp x0, x1, [sp, #-16]!
Run Code Online (Sandbox Code Playgroud)
是非法的.但是我不相信这种情况.我已经看到示例代码正是这样做的,而且我已经设法得到(Apple的)Clang来生成类似的代码,例如
stp x1, x0, [fp, #-16]!
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活思考什么是连续的意味着什么.我认为这可能与使用重叠寄存器有关,例如
stp x0, x0, [sp, #-16]!
stp w0, x0, [sp, #-12]!
Run Code Online (Sandbox Code Playgroud)
但是我已经看到示例代码也在做这类事情(并不是说代码是正确的!).如果是这种情况,我也会明确地使用术语重叠而不是连续.
有任何想法吗?
我目前正在尝试使用libc ++来编译和运行MSVC.在这样做的过程中,我遇到了一个令人讨厌的错误(至少我认为是一个错误),这已经花了我一段时间来确定.我有以下repro代码:
int globalInt = 666;
class mini_move_iterator
{
public:
mini_move_iterator(int* i) : __i(i){}
int&& operator*() const
{
return static_cast<int&&>(*__i);
}
int* __i;
};
void foo(int&& rval)
{
// Smash stack
char stackUser[1000];
for (int i = 0; i < 1000; ++i)
stackUser[i] = 0xff;
rval += 1;
}
int main()
{
mini_move_iterator mmi(&globalInt);
foo(*mmi);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
1)这是合法的,即我是否避免陷入未定义行为的领域(它在语法上是合法的)?
2)foo返回后全局变量globalInt的期望值是多少(未定义可能是可接受的答案)?
编辑:
我应该已经明确表示这在VS与MSVC 12中不起作用.在foo中,变量rval指向堆栈上的临时变量,因此全局变量永远不会递增.
临时是在int && operator*()const中创建的.如果我更换:
return static_cast<int&&>(*__i);
Run Code Online (Sandbox Code Playgroud)
同
return std::move(*i);
Run Code Online (Sandbox Code Playgroud)
那一切都很好.使用C-cast也会导致临时创建.