C# 甚至在不同的线程中调用
我必须用C语言制作一个Instant Messenger服务器。该服务器是一个控制台应用程序项目。我想制作一个运行在3个线程中的服务器。我将在下面的代码中解释 问题是如何从单独的线程调用函数,或在单独的线程上生成事件 这是主服务器类C# 甚至在不同的线程中调用,c#,multithreading,events,network-programming,console-application,C#,Multithreading,Events,Network Programming,Console Application,我必须用C语言制作一个Instant Messenger服务器。该服务器是一个控制台应用程序项目。我想制作一个运行在3个线程中的服务器。我将在下面的代码中解释 问题是如何从单独的线程调用函数,或在单独的线程上生成事件 这是主服务器类 public class GiNetServer { public void Start() { netServer = new NetServer(); msgHandler = new NetMsgHan
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);
}
}
NetServer类创建2个线程:acceptClientsThread和receiveMessagesThread。
接收线程调用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函数在单独的线程或主线程中运行
像这样,HandleMsg在receiveMessagesThread中运行
上面的代码是伪代码。如果有任何疑问,请告诉我。根据您的要求,有很多不同的方法可以将HandleMsg调用移动到不同的线程上。最简单的方法是使用以下命令在不同线程上引发NewNetMsg事件: 您也可以使用。您还可以将事件添加到由专用后台线程处理的。还有更多的选择。没有更多的细节,就不可能给出更具体的建议
ThreadPool.QueueUserWorkItem(s => NewNetMsg(netClient, nextMsg));