Solved

Vars in TServerClientThread

Posted on 1998-10-22
8
495 Views
Last Modified: 2010-04-06
Hi,

I have encountered the following problem.
I am write a service for windows NT with Delphi 3 C/S. I use some NTService
unit and create a TServerSocket runtime.
I use a Threadblocking methode to spawn new threads for each new connection
to my server. This seems to work fine,
except for the fact that a global variable decleared within th
TServerClientThread wich I want to give the port of the current
connection seems to overwrite the data for this var in all the open threads.
What I mean is that if a second connection is made the variable in the first
connection gets the same value as the variable
in the second (last) connection.

This problem seems to go away when I assign a value to the variable lateron
in the program but that doesn't make verry much
sense to me, because no paticulair thing happen before it that would be able
to solve the problem.

piece of my code:

Unit ClientThread;

type
  POP3Thread = class(TServerClientThread)
...

protected
    procedure Execute; override;
...
implementation
...
var UserPort : integer;
...
procedure POP3Thread.Execute;
begin
UserPort:=ClientSocket.RemotePort;
...(loop for receiving commands follows)
end.

Thanx for anny help in advance,

Martijn Tieland

0
Comment
Question by:mtieland
  • 4
  • 2
  • 2
8 Comments
 
LVL 27

Expert Comment

by:kretzschmar
ID: 1343862
hi mtieland,

your global-var should be in the implementation section of your unit, if so?

meikl
0
 

Author Comment

by:mtieland
ID: 1343863
I have put the vars behind the implementation section...

The strange thing is when I assign a value to these vars lateron
in the thread it some to work propperly...
0
 

Author Comment

by:mtieland
ID: 1343864
Edited text of question
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 27

Expert Comment

by:kretzschmar
ID: 1343865
hi mtieland,

maybe your var should be initialized
try

var userport : Integer = 0; {or OtherNumber}

meikl
0
 
LVL 12

Expert Comment

by:rwilson032697
ID: 1343866
Perhaps the variable being overwritten should be declared with ThreadVar?
0
 

Author Comment

by:mtieland
ID: 1343867
Thanks for the hint on ThreadVar, it works great,
1 question remains dough, what is a ThreadVar kind of a thing??
0
 

Author Comment

by:mtieland
ID: 1343868
By the way I am new to this expert-exchange thing but i think rwilson should get the points, because he gave the solution to the problem.

Thanx
0
 
LVL 12

Accepted Solution

by:
rwilson032697 earned 100 total points
ID: 1343869
Thanks mtieland!

Threadvar is used to declare a variable that is in thread local storage. What this means is that every thread will see a different instance of the variable. Generally these kinds of variables are placed into a TThread derived class but sometimes you need to use threadvar...

Cheers,

Raymond.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question