2009-08-14 43 views
0

SO用户被中断,.Multithreading净 - 实现选择的码不通过螺纹

我有3个线程在任何给定的时间同时运行时,麻烦的是螺纹后1次试图通过使用户名它连接到一台服务器线程2正在被调用,当它的线程1转到服务器关闭它的代码连接时。

有什么地方可以实现同时发送用户名和密码,此时中断对方的线程?

THX! 尼迪

+0

我认为你需要解释一下这个问题。不同的线程是否与服务器共享一个连接? – 2009-08-14 19:16:57

+0

你想让多个线程同时连接到服务器吗?(Web浏览器经常打开多个连接到同一个服务器来同时加载大量的东西。)或者你想一次只有一个线程来联系服务器? – 2009-08-14 19:21:54

+0

在刚刚发布的代码中,您是TelnetConnectorThreads [countofThreads]中的creatin ga线程,然后尝试启动TelnetConnectorThreads [intIndex](请注意索引变量) – cyberconte 2009-08-14 20:02:21

回答

5

我很怀疑它的真正线程争是这里的问题。

线程时间片非常快,服务器必须有一个可笑的短期超时为您的诊断是正确的。

我的猜测是你的代码有一些不同的错误,但我们不能确定它是什么,没有看到一些代码。

+1

虽然您的答案没有解决我的问题,但您的多线程文章 - http://www.yoda.arachsys.com/csharp/threads/locking.shtml 谢谢! – Nidhi 2009-08-14 20:07:36

+1

你能说你如何解决这个问题吗? – 2009-08-14 23:23:39

+0

是的,我甚至想知道问题是如何解决的。 – 2009-08-15 01:11:57

1

线程通常交换的毫秒数量级,所以我不认为这是什么导致您的程序断开连接。这就是说,你可以实现锁/互斥锁,以确保在没有其他线程执行其代码的情况下执行关键代码,甚至可以使用线程优先级确保一个线程优先于其他线程 - 但是不能强制线程不屈服,操作系统可以决定你已经运行足够长的时间,并且不管你是否屈服。此外,在所有现代时间表中,您所寻找的行为或多或少地被阻止,以防止其他过程的匮乏。

1

它看起来像你试图在一个套接字上复用多个数据流。所以你可能会在等待服务器时遇到线程切换问题,但是如果是这种情况,你可能正在做这样的事情,这是一种不适合多线程的方式。

void Task(int type) 
{ 
    // Authenticate 
    // Send Data 
    // Disconnect 
} 

// Connect 
Thread.Start(Task(1)); 
Thread.Start(Task(2)); 
Thread.Start(Task(3)); 

如果你有线程1,2,3串联服务器上做工作,你有几个方法可以做到这一点:

1)做你的工作有不同的线程连接

void Task(int type) 
{ 
    // Connect 
    // Authenticate 
    // Send Data 
    // Disconnect 
} 

Thread.Start(Task(1)); 
Thread.Start(Task(2)); 
Thread.Start(Task(3)); 

2)做你的工作与单线程一个连接

无效任务(整型) {// 发送数据 }

//连接 //鉴定 任务(1); 任务(2); 任务(3); //断开

3)使用多个连接