The SendMyMessage function is contended between the two threads and could cause malfunctions or mistakes?
thank you
Example #0
- Code: Select all
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
bool bAbort;
void SendMyMessage(char *msg);
DWORD WINAPI Thread1( LPVOID lpParameter );
DWORD WINAPI Thread2( LPVOID lpParameter );
DWORD ID1, ID20;
HANDLE Trd1, Trd2;
//---------------------------------------------------------------------------
#pragma link "Grids"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ServerSocket1->Port = 5000;
ServerSocket1->Active = True;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bAbort = false;
Trd1 = CreateThread(NULL,0,Thread1,NULL,0,&ID1);
Trd2 = CreateThread(NULL,0,Thread2,NULL,0,&ID2);
Button1->Enabled=false;
Button2->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
bAbort = true;
Button1->Enabled=true;
Button2->Enabled=false;
}
//---------------------------------------------------------------------------
DWORD WINAPI Thread1( LPVOID lpParameter )
{
while(!bAbort)
{
SendMyMessage("aabbcc");
Sleep(50);
smf=1;
}
return 0;
}
//---------------------------------------------------------------------------
DWORD WINAPI Thread2( LPVOID lpParameter )
{
while(!bAbort)
{
SendMyMessage("ddeeff");
Sleep(50);
smf=0;
}
return 0;
}
//---------------------------------------------------------------------------
void SendMyMessage(char *msg)
{
try{
for(int actconn = 0; actconn < Form1->ServerSocket1->Socket->ActiveConnections; actconn++)
Form1->ServerSocket1->Socket->Connections[actconn]->SendText(msg);
} catch(...) { }
msg[0]='\0';
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
TerminateThread(Trd1,0);
TerminateThread(Trd2,0);
Form1->Caption = "Stopped.....";
ServerSocket1->Active = False;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
if (ErrorCode == 10053) {
Socket->Close();
}
ErrorCode = 0;
}
//---------------------------------------------------------------------------