C#でInstant Messengerサーバーを作成する必要があります。サーバーはConsoleApplicationプロジェクトです。そして私は3つのスレッドで動作するサーバーを作りたいと思っています。私は以下のコードで説明します。別のスレッドでも呼び出し/呼び出し
質問は、別のスレッドから関数を呼び出す方法、または別のスレッドでイベントを作成する方法です。
これはメインサーバークラスです。 acceptClientsThreadとreceiveMessagesThread:
public class GiNetServer
{
public void Start()
{
netServer = new NetServer();
msgHandler = new NetMsgHandler();
netServer.NewNetMsg += msgHandler.HandleMsg;
Work();
}
private void Work()
{
while(true) //This runs in the MainThread
sleep(1);
}
}
ネットサーバークラスは、2つのスレッドを作成します。 受信スレッドはNewNetMsgを呼び出します。
public class NetServer
{
public event NewNetMsgEventHandler NewNetMsg;
public NetServer()
{
acceptClientsThread = new Thread(ListenForClients);
receiveMessageThread = new Thread(Receive);
//and of course starts them here...
}
private void Receive()
{
while(true)
{
Heartbeat();
}
}
private void Heartbeat()
{
foreach(netClient in clientsList)
{
if (netClient.DataAvalible)
{
netClient.Recive();
}
if (!netClient.IsBufferEmpty())
{
nextMsg = netClient.NextMessage();
if (nextMsg != null)
NewNetMsg(netClient, nextMsg); //Call the event!
}
}
}
}
msgHandler.HandleMsg関数を別のスレッドまたはMainThreadで実行させるにはどうすればよいですか?
このように、HandleMsgはreceiveMessagesThreadで実行されます。
上記のコードは擬似コードです。あいまいなことがあれば教えてください。
ありがとうございました。 – dburner