Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Για το initialization ενός array με 0 στοιχεία έχεις δίκιο.Δεν δημιουργεί πρόβλημα.

 

Αυτό που ήθελα να πω για την MultiByteToWideChar() είναι ότι αν δεν την καλέσεις πρώτα για να δεις το length σε wchar_t που χρειάζεσαι, υποθέτοντας ότι πρέπει να είναι το ίδιο με το size του buffer, θα έχεις garbage data τα οποία θα δοκιμάσει να κάνει match το regular expression.

 

 

Το παράδειγμα σου όπως το έχεις,στο PC μου, κάνει 13 δευτερόλεπτα.

Αν θέσω το size του page στην τιμή που μου επιστρέφει η MultiByteToWideChar() κάνει 1 δευτερόλεπτο.

 

( Σε release mode και στις δύο περιπτώσεις κάνει 0 δευτερόλεπτα :o )

wub.gif

Μεγα μαλακια μου! Σ'ευχαριστω !!!

 

Εδιτ. Ειπα κι γω. 10 σεκ για 9 κιλομπαϊτ

 

grin.png Κατω απο ενα 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;
}

 

 

 

 

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...