C语言 : Parallel threads?

标签 c multithreading sockets

基本上我有两个我想并行运行的套接字,所以我不必等待一个套接字发送数据以从另一个套接字接收数据等等。 我可以通过 fork 轻松地做到这一点,但是,为了更整洁,我想知道是否有办法从同一个过程中做到这一点。

类似于:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void test(){
         sleep(5000);
}
int main(int argc, char *argv[])
{
  printf("%d\n",time(NULL));
  test();
  printf("%d\n",time(NULL));
  system("PAUSE");
  return 0; 
}

但是两行输出将是相同的,因为 sleep 功能正在“其他地方”处理。

我找到了一份关于创建线程的 MSDN 文档,但它谈到了 C 库函数对其不安全,这让我很担心,我喜欢我的 stdlib!

所以,是的,如果你有任何例子,你可以只使用 sleep() 作为占位符,我非常擅长套接字 :) 我在 Windows 上,但 Unix 版本也不错,或者更好的是,可以同时使用两者。

编辑:感谢您的所有回复。 我想我明白你的意思了:我有两个套接字,然后我调用 select(),它返回所有准备好接收/发送数据的套接字,我发送/接收我的数据,然后循环返回。 但是,由于尚未创建套接字,我如何使用 accept() 实现它?

最佳答案

最简单的方法是使套接字成为非阻塞的,并使用 select() 和/或 WaitForMultipleObjects() 检查何时可以读/写更多来自/到每个套接字的数据。这样一来,应用程序可以保持单线程状态,同时看起来仍同时为多个套接字提供服务。

关于C语言 : Parallel threads?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901119/

相关文章:

c - GCC 生成的程序集等同于 C 中的 continue 语句

C 动态宏选择

java - 线程本地握手的解释

java - Java中的ScheduledExecutorService和线程

javascript - Sails 套接字不会重新连接

c - 使用 `*((*(&array + 1)) - 1)` 获取自动数组的最后一个元素是否安全?

c - 使用 ncurses 从文件打印 ascii 艺术效果很奇怪

c# - 在 C# 中,使用 for 循环迭代数组是线程安全操作吗?使用 foreach 循环迭代 IEnumerable<T> 怎么样?

java - 使用 flex socket 读取 AMF 对象

javascript - 使用JavaScript从浏览器连接到TCP套接字