παπι Δημοσ. 10 Νοεμβρίου 2011 Μέλος Δημοσ. 10 Νοεμβρίου 2011 Για το initialization ενός array με 0 στοιχεία έχεις δίκιο.Δεν δημιουργεί πρόβλημα. Αυτό που ήθελα να πω για την MultiByteToWideChar() είναι ότι αν δεν την καλέσεις πρώτα για να δεις το length σε wchar_t που χρειάζεσαι, υποθέτοντας ότι πρέπει να είναι το ίδιο με το size του buffer, θα έχεις garbage data τα οποία θα δοκιμάσει να κάνει match το regular expression. Το παράδειγμα σου όπως το έχεις,στο PC μου, κάνει 13 δευτερόλεπτα. Αν θέσω το size του page στην τιμή που μου επιστρέφει η MultiByteToWideChar() κάνει 1 δευτερόλεπτο. ( Σε release mode και στις δύο περιπτώσεις κάνει 0 δευτερόλεπτα ) Μεγα μαλακια μου! Σ'ευχαριστω !!! Εδιτ. Ειπα κι γω. 10 σεκ για 9 κιλομπαϊτ Κατω απο ενα sec !! >DWORD CALLBACK FeedData(LPVOID lpVoid) { typedef my::SH<HINTERNET,WinHttpCloseHandle> Internet; my::SH<HANDLE,CloseHandle> _thisthread(GetCurrentThread()); Internet hRq; Internet hSession; Internet hConnection; DWORD dwSize; DWORD dwDownloaded; std::vector<char> buffer; char *buf; wchar_t tmp[20]; std::wstring page; std::wregex regex(L".*?\t(.*?)\t(.*?)\t(.*?)\t.*?\t(.*?)\r"); std::wsregex_iterator rend; sqlite3_stmt *stmt; int id = static_cast<int>(time(NULL)); std::wstring obj(L"/markets/tickerfeed.asp?dummy="); obj += _itow_s(static_cast<int>(rand() * time(NULL)),tmp,10); hSession = WinHttpOpen(g_UserAgent,0,0,0,0); if(!hSession) return 1; hConnection = WinHttpConnect(hSession,L"www.naftemporiki.gr",INTERNET_DEFAULT_HTTP_PORT,0); if(!hConnection) return 1; hRq = WinHttpOpenRequest(hConnection,L"GET",obj.c_str(),0,0,0,0); if(!hRq) return 1; if(!WinHttpSendRequest(hRq,0,0,0,0,0,0)) return 1; if(!WinHttpReceiveResponse(hRq,0)) return 1; do { dwSize = 0; if(!WinHttpQueryDataAvailable(hRq,&dwSize)) break; buf = new char[dwSize]; if(!WinHttpReadData(hRq,buf,dwSize,&dwDownloaded)) { delete[] buf; break; } buffer.insert(buffer.end(),buf,buf + dwDownloaded); delete[] buf; }while(dwSize > 0); page.resize( MultiByteToWideChar(CP_UTF8,0,buffer.data(),buffer.size(),0,0) ); MultiByteToWideChar(CP_UTF8,0,buffer.data(),buffer.size(),&page[0],page.size()); sqlite3_exec(g_Database,"BEGIN;",NULL,NULL,NULL); for(std::wsregex_iterator it(page.begin(),page.end(),regex); it != rend; ++it) { sqlite3_prepare_v2( g_Database, "INSERT INTO rl_data VALUES(NULL,?1,?2,?3,?4,?5);",-1, &stmt, NULL); sqlite3_bind_int(stmt,1,id); sqlite3_bind_text16(stmt,2,(*it)[1].str().c_str(),-1,NULL); sqlite3_bind_text16(stmt,3,(*it)[2].str().c_str(),-1,NULL); sqlite3_bind_double(stmt,4,_wtof((*it)[3].str().c_str())); sqlite3_bind_double(stmt,5,_wtof((*it)[4].str().c_str())); sqlite3_step(stmt); sqlite3_finalize(stmt); } sqlite3_exec(g_Database,"END;",NULL,NULL,NULL); SendMessage((HWND)lpVoid,WM_REFRESHLIST,0,id); CloseHandle(GetCurrentThread()); return 0; }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα