📄 receivesmsthread.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <dirent.h>
#include <dir.h>
#include <stdio.h>
#include <stdlib.h>
#include <winbase.h>
#include <time.h>
#include "smsPdu.h"
#include "ReceiveSmsThread.h"
#include "sms_Unit1.h"
#pragma package(smart_init)
extern int is_receive_thread_running; //线程运行标志
extern int receive_thread_stop;
extern HANDLE hComm1;
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall Unit1::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall ReciveSmsThread::ReciveSmsThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall ReciveSmsThread::Execute()
{
BOOL tf;
char comm[100],bite_rate[100],sms_center[100],tmp[500],full_file_name[100];
//char tel_no[500],sms_content[500];
FILE *fp;
SM_PARAM sm_param;
SM_PARAM pMsg;
int GetItemFromStr(char * str,char fgf,int item_no,char * val,int val_len );
char * delete_space(char *str);
int get_systime1(char *bgntime);
int GetCfgItem(char * cfg_file,char *cfg_seg, char *cfg_item, char *value);
BOOL OpenComm1(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits);
void WriteComm1(void* pData, int nLength);
int ReadComm1(void* pData, int nLength);
int my_gsmReadMessage(SM_PARAM* pMsg);
//设线程运行标志
is_receive_thread_running=1;
//进行手机和电脑的连接
//
getcwd(full_file_name, 100);
strcat(full_file_name,"\\sms.ini");
memset(comm, 0, sizeof(comm));
memset(bite_rate, 0, sizeof(bite_rate));
memset(sms_center, 0, sizeof(sms_center));
if( GetCfgItem(full_file_name,"receive_sms","comm",comm)!=0
||GetCfgItem(full_file_name,"receive_sms","bite_rate",bite_rate)!=0
)
{
sprintf(tmp,"读配置文件 %s 错误!! 接收线程结束 ",full_file_name);
Form1->StatusBar1->Panels->Items[0]->Text=tmp;
is_receive_thread_running=0;
return;
}
//打开串口
tf=OpenComm1(comm, atol(bite_rate), NOPARITY, 8, ONESTOPBIT);
if( tf == 0 )
{
sprintf(tmp,"接收:打开串口%s失败!!", comm);
Form1->StatusBar1->Panels->Items[2]->Text=tmp;
is_receive_thread_running=0;
return ;
}
connect:
//连接手机和电脑
{
char cmd[100],ans[100];
int nLength;
//清除串口缓冲区
PurgeComm(hComm1,PURGE_TXCLEAR);
PurgeComm(hComm1,PURGE_RXCLEAR);
memset(ans, 0, sizeof(ans));
sprintf(cmd, "AT\r");
// 输出命令串"AT"
WriteComm1(cmd, strlen(cmd));
// 读应答数据
nLength = ReadComm1(ans, 128);
// 根据能否找到"OK"决定连接成功与否
if( (nLength<=0) || (strstr(ans, "OK")==NULL) )
{
sprintf(tmp, "%s", "接收:手机与电脑连接失败!");
Form1->StatusBar1->Panels->Items[2]->Text=tmp;
Sleep(2000);
if( receive_thread_stop==1 ){ //终止线程
is_receive_thread_running=0;
CloseHandle(hComm1);
return;
}
else{
Sleep(2000);
goto connect;
}
}
sprintf(tmp, "%s", "");
Form1->StatusBar1->Panels->Items[2]->Text=tmp;
}//end of connect
/*
//对西门子3618、6618要置mem1为它的‘读’短信内存
{
char cmd[100];
sprintf(cmd, "AT+CPMS=ME\r");
WriteComm1(cmd, strlen(cmd));
}
*/
//循环扫描手机短信接收内存
while(1){
if( receive_thread_stop==1 ){ //终止线程
CloseHandle(hComm1);
is_receive_thread_running=0;
return;
}
memset(&pMsg, 0, sizeof(pMsg));
//清除串口缓冲区
PurgeComm(hComm1,PURGE_TXCLEAR);
PurgeComm(hComm1,PURGE_RXCLEAR);
//接收短信
my_gsmReadMessage(&pMsg);
Sleep(1000);
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -