Hmmz, ik heb een beetje een vaag probleem met een programma wat ik aan het schrijven ben. Het gaat hier om een server, en ik heb een aparte thread gemaakt waarin gewacht wordt op een verbinding. De void die ik hiervoor gebruik ziet er zo uit:
De thread blokkeert bij de regel TcpClient tempclient = InterlinkXPServer.AcceptTcpClient(). De thread doet hier dus niets totdat er een verbinding gemaakt wordt. De eerste keer gaat dit goed. Maar als er dan een verbinding gemaakt wordt en het programma komt wederom weer bij die regel, dan gebruikt het programma opeens 100% CPU. Het maffe is dus dat het de eerste keer wel goed gaat, en de tweede keer niet. Overigens gaat het in een andere thread die simultaan loopt wel goed. De void daarvoor ziet er zo uit:
Hier gaat het dus wel goed, en gebruikt het programma niet 100% cpu nadat er een client een verbinding heeft gemaakt. Iemand een idee hoe dat komt?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| private void StartServer()
{
try
{
InterlinkXPServer = new TcpListener(ServerSettings.ServerPort);
InterlinkXPServer.Start();
while (true)
{
TcpClient tempClient = InterlinkXPServer.AcceptTcpClient();
int newid = Connections.Add(new Connection(tempClient, this));
}
}
catch (System.Exception)
{
foreach (Connection con in Connections)
{
Connections.Remove(con);
con.Dispose();
}
return;
}
} |
De thread blokkeert bij de regel TcpClient tempclient = InterlinkXPServer.AcceptTcpClient(). De thread doet hier dus niets totdat er een verbinding gemaakt wordt. De eerste keer gaat dit goed. Maar als er dan een verbinding gemaakt wordt en het programma komt wederom weer bij die regel, dan gebruikt het programma opeens 100% CPU. Het maffe is dus dat het de eerste keer wel goed gaat, en de tweede keer niet. Overigens gaat het in een andere thread die simultaan loopt wel goed. De void daarvoor ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| private void StartManagement()
{
try
{
InterlinkXPManagement = new TcpListener(ServerSettings.ManagementPort);
InterlinkXPManagement.Start();
while (true)
{
TcpClient tempClient = InterlinkXPManagement.AcceptTcpClient();
Connections.Add(new ManagementConnection(tempClient, this));
}
}
catch (System.Exception)
{
foreach (ManagementConnection con in Connections)
{
con.CloseConnection();
Connections.Remove(con);
con.Dispose();
}
return;
}
} |
Hier gaat het dus wel goed, en gebruikt het programma niet 100% cpu nadat er een client een verbinding heeft gemaakt. Iemand een idee hoe dat komt?