通过剖析,我发现这里的sprintf需要很长时间.是否有更好的替代方案仍然处理y/m/dh/m/s字段中的前导零?
SYSTEMTIME sysTime;
GetLocalTime( &sysTime );
char buf[80];
for (int i = 0; i < 100000; i++)
{
sprintf(buf, "%4d-%02d-%02d %02d:%02d:%02d",
sysTime.wYear, sysTime.wMonth, sysTime.wDay,
sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
}
Run Code Online (Sandbox Code Playgroud)
注意:OP在评论中解释说这是一个精简的例子."真实"循环包含使用来自数据库的不同时间值的附加代码.分析已经确定sprintf()为罪犯.
fprintf是线程安全的吗? glibc手册似乎说它是,但我的应用程序,使用单个调用fprintf()写入文件似乎是混合来自不同进程的部分写入.
编辑:为了澄清,有问题的程序是一个lighttpd插件,服务器正在运行多个工作线程.
查看该文件,一些写入混合在一起.
编辑2:我看到的问题似乎可能是由于lighttpd的"工作线程"实际上是单独的进程: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
问题
通过在同一个套接字上运行2个或更多进程,您将获得更好的并发性,但是您必须注意一些缺点:
- mod_accesslog可能会创建损坏的访问日志,因为同一个文件打开两次并且未同步.
- mod_status将有n个独立的计数器,每个进程一个.
- mod_rrdtool将失败,因为它收到两次相同的时间戳.
- mod_uploadprogress将不会显示正确的状态.
我正在编写一个PHP扩展,它接受一个值并改变它.示例PHP:
$someVal = "input value";
TestPassRef($someVal);
// value now changed
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?
请建议一种使用pydev自动代码格式自动格式化eclipse项目中所有py文件的方法.我们正在使用pydev代码格式化程序来使我们的代码保持一致,并且非常希望将所有文件标准化.
由于我们在pydev中启用了代码格式化,因此每次pydev触及py文件时,只有代码格式化清理才会在许多地方进行更改.我们希望在整个项目中一次性完成.
谢谢
我有一个信用卡号输入表单,将由移动和非移动浏览器使用.
我想暗示键盘应出现在手机上,并允许(可选)空格,因此应接受"4111 1234 1234 1234"或"4111123412341234".
根据我的发现,选项是:
a)<input type="tel"/>- 这看起来像我想要的那样(至少使用当前的移动浏览器),但它在语义上是错误的.
b)<input type="text" pattern="[\d ]*"/>或类似的 - iPhone识别某些模式([0-9]*,\d*)与键盘一起工作,但这在Android上不起作用.此外,我不确定iPhone是否会为允许空间提供任何模式,但我现在还没有iPhone可供检查.
c)尝试使用Javascript进行浏览器检测并使用(a)用于移动设备和(b)用于非移动设备.Cludgy,并没有真正的好处(a).
<input type="number"/>因为Chrome至少会将这样的输入强制转换为数字,因此用空格来打破输入,这似乎是一个非启动者.
是否有一种更好的方法来暗示移动浏览器,他们应该提供一个小工具而不是使用type="tel"?
编辑:
也许-webkit-*可以应用于普通文本输入字段的属性暗示应该显示小键盘?
我正在使用PHP NumberFormatter类来打印货币值.
例如:
$cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
$cFormatter->formatCurrency(123, 'USD');
$cFormatter->formatCurrency(123, 'BRL');
$cFormatter->formatCurrency(123, 'GBP');
Run Code Online (Sandbox Code Playgroud)
这工作正常,并按预期分别返回"$123.00","R$123.00" "£123.00.
但负数字印在"会计风格"上,用括号括起来,而不是前导减去" - ".
例如:
$cFormatter->formatCurrency(-456, 'USD');
Run Code Online (Sandbox Code Playgroud)
返回"($456.00)",而我想要"-$456.00".当然有一种简单的方法可以做到这一点?
我可以通过覆盖前缀和后缀删除括号,如下所示:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
Run Code Online (Sandbox Code Playgroud)
但后来我没有货币符号,例如"-456.00".
在设置NEGATIVE_PREFIX属性时,是否需要使用货币符号的转义码?
编辑:我很高兴设置一个不同的区域设置,如果这给了我正在寻找的结果.
编辑2:查看Intl库文档(这是用于实现NumberFormatter的库),以下看起来很有希望:
¤(\ u00A4):前缀或后缀:无货币符号,替换为货币符号.如果加倍,则用国际货币符号代替.如果是三倍,则替换为货币复数名称,例如美国的"美元"或"美元".如果存在于模式中,则使用货币小数分隔符而不是小数分隔符.
但是这个:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
Run Code Online (Sandbox Code Playgroud)
只需打印"-¤123",就没有喜悦.
编辑3:我想我找到了答案,见下文.
如何在Joomla中使用memcache?我是这个领域的新手,所以请描述你的答案.
我想分配并初始化一大块连续的内存(~1GB),然后将其标记为只读并分叉多个(比如几十个)将使用它的子进程,而不制作自己的内存副本(机器没有足够的内存().
我是否正确地认为如果我malloc像往常一样将内存标记为只读mprotect(addr, size, PROT_READ),然后fork,这将允许子进程安全地使用内存而不会导致它被复制?(假设我确保在mprotect调用后没有尝试写入分配的内存).
编辑:感谢您的所有答案.
一个后续问题 - 我正在计划使用shmget,但我认为它已经使用mm,因此仅限于较小的分配(请参阅本页的" 限制"部分).例如/proc/sys/kernel/shmmax,服务器上的32MB我正在使用这个.但我想要1GB的连续内存.我错了这个限制吗?
我喜欢SUBSTRING_INDEXMySQL中的函数,特别是因为你可以使用负索引从字符串的右侧开始搜索.
在PHP中是否有相当于这个功能的东西?(或使用一些代码轻松实现)
我必须将网站名称修改为sql中的".com"或"co.in"
示例:假设我的站点地址为"http://stackoverflow.com/questions/ask?title=trim".我需要将结果作为"stackoverflow.com".
在某种情况下它可能像"www.google.co.in"然后我需要它是"google.co.in"