Столкнулся с проблемой зависания ОС Windows 2003 server SP2 связанной с избыточным заполнением не выгружаемого пула памяти (как я понял это память процессора). Грешу на свой код, т.к. оптимизации никакой нет. С чем может быть связана эта проблема и прошу помощи и совета в оптимизации кода? код снизу:
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <winsock2.h>
#include <tchar.h>
#include <iostream.h>
#include <fstream>
#include <conio.h>
#pragma argsused
//---------------------------------------------------------------------------
//-------------------------------Переменные глобальные-----------------------
char msg[1024];
char msg1[1024];
char c[45];
//---------------------------------------------------------------------------
//-------------------------------Отправка сообщения--------------------------
int send(){
char t[11],d[8],n[7],h[2],m[2],s[2];
WSADATA wData;
struct sockaddr_in addr;
SOCKET sock;
strncpy(t,&c[0],11); // Номер телефона
strncpy(d,&c[14],8); // Дата
strncpy(n,&c[35],7); // Номер накладной
strncpy(h,&c[23],2); // Часы
strncpy(m,&c[26],2); // Минуты
strncpy(s,&c[29],2); // Секунды
//... Формируем запрос
strcat(&msg[0],"POST /job.ap HTTP/1.1\r\nHost: 192.168.0.225\r\nConnection: keep-alive\r\n
Referer: http://192.168.0.225/index.html?page...ontent-Length: 350\r\n
Authorization: Basic cm9vdDpyb3V0ZXI=\r\nOrigin: http://192.168.0.225\r\n
X-Prototype-Version: 1.6.0.2\r\nX-Requested-With: XMLHttpRequest\r\n
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1\r\n
Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\nAccept: text/javascript, text/html, application/xml, text/xml, */*\r\n
Accept-Encoding: gzip,deflate,sdch\r\nAccept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4\r\n
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3\r\n\r\njob=SMSNewMessageUpdate&pn=");
strncat(&msg[701],"89206053638",11);
strcat(&msg[712],"&message=");
strcat(&msg[721],"%D0%92%D0%B0%D1%88%D0%B0%20%D0%B7%D0%B0%D1%8F%D0%B2%D0%BA%D0%B0%20%E2%84%96%D0%91%D0%9E%D0%96");
strncat(&msg[814],n,11);
strcat(&msg[821],"%20%D0%BE%D1%82%20");
strncat(&msg[839],d,8);
strcat(&msg[847],"%20%D0%BD%D0%B0%D0%B1%D1%80%D0%B0%D0%BD%D0%B0%20%D0%B2%20");
strncat(&msg[904],h,2);
strcat(&msg[906],"%3A");
strncat(&msg[909],m,2);
strcat(&msg[911],"%3A");
strncat(&msg[914],s,2);
strcat(&msg[916],"!");
strcat(&msg[917],"&port=0&_=\r\n");
//...
if(WSAStartup(MAKEWORD(1,1),&wData)!=0)
{
return 1;
}
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==-1)
{
return 2;
WSACleanup();
}
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=inet_addr("192.168.0.225");
if (connect(sock,(struct sockaddr *)&addr,sizeof(addr))!=0) {
return 3;
shutdown(sock,2);
closesocket(sock);
WSACleanup();
}
send(sock,&msg[0],sizeof(msg),0); //Отправляем запрос
memset(msg1,0,sizeof(msg1)); //Чистим переменную
memset(msg,0,sizeof(msg)); //Чистим переменную
recv(sock,&msg1[0],sizeof(msg1),0); //читаем ответ
shutdown(sock,2);
closesocket(sock);
WSACleanup();
Sleep(20000);
return 0;
}
//-------------------------------Читаем и записываем файлик------------------
int str(){
ifstream fr(strcat(Date().FormatString("yyyymmdd").t_str(),".txt")); //открываем файл на чтение и запись
if (!fr){
printf("File not found!!!\r\n");
Sleep(5000);
return 0;}else{
int i=0;
while(!fr.eof()){
fr.getline(&c[0],45,'\n');
if (c[12]=='1') //проверка на корректность номера
{switch (send()){
case 1:
printf("Error initialization WSAStartup!!!\r\n");
Sleep(5000);
break;
case 2:
printf("Error initialization variable socket!!!\r\n");
Sleep(5000);
break;
case 3:
printf("Error initialization connect!!!\r\n");
Sleep(5000);
break;
case 4:
printf("Error sending!!!\r\n");
Sleep(5000);
break;
case 0:
if (fr.eof()) {i=fr.tellg()-31;}else{i=fr.tellg()-33;} // выявляем последнюю строку
fstream fw(strcat(Date().FormatString("yyyymmdd").t_str(),".txt"));
fw.seekg(i,ios::beg); //перемещаем указатель
fw.put('0');//меняем символ на 0
fw.close();
}
}
}
fr.close();
return 0; } //Все ок!
}
//-------------------------------Тело Программы------------------------------
int main() //
{
SetConsoleTitle("SMSSender");
HWND hwnd;
hwnd = FindWindow(NULL, "SMSSender");
ShowWindow(hwnd, SW_MINIMIZE);
if (Now().FormatString("HH").ToInt()>21||Now().FormatString("HH").ToInt()<9){
return 0;}
else{
str();
}
return 0;
}