Vars in TServerClientThread

Posted on 1998-10-22
Last Modified: 2010-04-06

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;

  POP3Thread = class(TServerClientThread)

    procedure Execute; override;
var UserPort : integer;
procedure POP3Thread.Execute;
...(loop for receiving commands follows)

Thanx for anny help in advance,

Martijn Tieland

Question by:mtieland
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
LVL 27

Expert Comment

ID: 1343862
hi mtieland,

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


Author Comment

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...

Author Comment

ID: 1343864
Edited text of question
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

LVL 27

Expert Comment

ID: 1343865
hi mtieland,

maybe your var should be initialized

var userport : Integer = 0; {or OtherNumber}

LVL 12

Expert Comment

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

Author Comment

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

Author Comment

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.

LVL 12

Accepted Solution

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...



Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

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

Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Monitoring a network: why having a policy is the best policy? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the enormous benefits of having a policy-based approach when monitoring medium and large networks. Software utilized in this v…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

734 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