Sunucu programında bir noktaya iki farklı iş parçacığım var. Her iki iş parçacığı bir dize alıp devam edene kadar sunucunun bu noktada duraklamasını istiyorum. Şu anda iş parçacığı "duraklatmak" için Console.ReadKey();
kullanıyorum. Ama bu bir çözüm değil, ilerlemek için iki kere bir tuşa basmalıyım (her iş parçacığı için bir tane).Bir Sunucuya sahip olmak aynı anda iki iş parçacığına sahip oluyor
Tüm sınıflar tarafından her zaman erişilebilen ve düzenlenebilir program sınıfında global bir sayaç sahibi olma olasılığı var mı? ConcurrentDictionary
'a benzer bir kavram. Bu şekilde, hangi iş parçacığının önce bir dize gönderdiğine ve her iki istemcinin de yanıt verdiğinden emin oluncaya kadar programın askıda kalmasını sağlayarak iş parçacığı arasında ayrım yapabiliyorum.
class Program
{
public static bool isFirstThread = false;
static void Main(string[] args)
{
runServer();
}
static void runServer()
{
//server setup
Thread[] threadsArray = new Thread[2];
int i = 0;
try
{
while(true) //game loop
{
Socket connection;
connection = listener.AcceptSocket();
threadRequest = new Handler();
if(i==0) //first thread
{
threadsArray[i] = new Thread(() => threadRequest.clientInteraction(connection, true);
}
else //not first thread
{
threadsArray[i] = new Thread(() => threadRequest.clientInteraction(connection, false);
}
threadsArray[i].Start();
i++;
}
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
class Handler
{
public void clientInteraction(Socket connection, bool isFirstThread)
{
string pAnswer = string.Empty;
//setup streamReaders and streamWriters
while(true) //infinite game loop
{
//read in a question and send to both threads.
pAnswer = sr.ReadLine();
Console.WriteLine(pAnswer);
Console.ReadKey(); //This is where I need the program to hang
awardPoints();
}
}
}
Bu ben kaçırmıştım sapıklık içindedirler birkaç şey olabilir bu yüzden soru kabartmak önlemek için biraz doğranmış ettik benim kod ne yaptığını kaba bir fikirdir.
Teoride, soru dizisinin sunucudan gönderildiği zamandan bir zamanlayıcı ayarlayabilirdim, ancak bu aşamada olmamayı tercih ederim.
Herhangi bir düşünce veya işaretçi çok takdir edilecektir. Şimdiden teşekkürler.
A koşulu ile döngü sırasında? Bir değişken, genellikle, yarış durumunun gerçekleştirilmesi dışında, birden fazla iplik tarafından düzenlenebilir. Ancak, beklemek isterseniz, boolean koşuluyla bir while döngüsü kullanın. –
Bu değişken nerede bildirilir? Ben program sınıfına bir tane koyarak deneylerim ama iş parçacığı oluşturulduğunda ben geçmezse, bu işe yaramaz. ve iş parçacığı oluşturulduğunda, önerilen süre döngüsünün durumu bilinmiyor – James
Her iki iş parçacığının aynı anda mı, yoksa yalnızca bir tane mi devam etmesini istiyorsunuz? Değişkeni her zaman bir "ref" parametresi olarak geçirebilirsiniz ... –