问题:工作需要解析文件中的日期,将字符串转成QDateTime,速度太慢,于是换成多线程转换
没想到换成多线程后速度更慢。vs调试发现大量CPU开销都在QDateTime::fromString,于是推测这个静态函数不能多线程使用。
解决方式,自己写一个解析字符的函数,这样可以在多线程中使用了,例子如下
QDateTime fromQString(const QString& _str, const QString& _format, Qt::TimeSpec _spec)
{
if (_str.size() != _format.size()) {
return QDateTime();
}
int year = 0, month = 0, day = 0, hour = 0, minute = 0, seconde = 0, millisecond = 0;
int begin = _format.indexOf("yyyy");
if (begin >= 0) {
year = _str.mid(begin, 4).toInt();
}
begin = _format.indexOf("MM");
if (begin >= 0) {
month = _str.mid(begin, 2).toInt();
}
begin = _format.indexOf("dd");
if (begin >= 0) {
day = _str.mid(begin, 2).toInt();
}
begin = _format.indexOf("hh");
if (begin >= 0) {
hour = _str.mid(begin, 2).toInt();
}
begin = _format.indexOf("mm");
if (begin >= 0) {
minute = _str.mid(begin, 2).toInt();
}
begin = _format.indexOf("ss");
if (begin >= 0) {
seconde = _str.mid(begin, 2).toInt();
}
begin = _format.indexOf("zzz");
if (begin >= 0) {
millisecond = _str.mid(begin, 3).toInt();
}
QDate date(year, month, day);
QTime time(hour, minute, seconde, millisecond);
return QDateTime(date, time, _spec);
}