Язык C: параллельные темы? - PullRequest
1 голос
/ 05 мая 2011

По сути, у меня есть два сокета, которые я хотел бы использовать параллельно, поэтому мне не нужно ждать, пока один сокет отправит данные для получения данных от другого и т. Д. Я могу легко это сделать, разветвив,но, чтобы быть более аккуратным, я хотел бы знать, есть ли способ сделать это из того же процесса.

Что-то вроде:

#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; 
}

Но обе строки вывода будутто же самое, поскольку функция сна обрабатывается «где-то еще».

Я нашел документ MSDN о создании потоков, но там говорилось о небезопасных для него функциях библиотеки C, что меня беспокоило, мне нравитсямой stdlib!

Так что, да, если у вас есть примеры, вы можете просто использовать sleep () в качестве заполнителя, я довольно хорошо разбираюсь с сокетами :) Я на Windows, но версия Unix будетбудь хорошим или еще лучше, тот, который работает с обоими.

РЕДАКТИРОВАТЬ: Спасибо за все ваши ответы.Мне кажется, я понимаю, что вы имеете в виду: у меня есть два сокета, затем я вызываю select (), он возвращает все сокеты, которые готовы к приему / отправке данных, я отправляю / получаю свои данные, затем возвращаюсь к циклу.Однако как я могу реализовать это с помощью accept (), так как сокет еще не создан?

Ответы [ 4 ]

3 голосов
/ 05 мая 2011

Самый простой подход - сделать сокеты неблокирующими и использовать select() и / или WaitForMultipleObjects(), чтобы проверить, когда можно читать / записывать больше данных из / в каждый сокет.Таким образом, приложение может оставаться однопоточным, хотя по-прежнему может обслуживать несколько сокетов одновременно.

0 голосов
/ 05 мая 2011

Я не знаю, работает ли он (или имеет аналог) в Windows, но всегда есть select .

0 голосов
/ 05 мая 2011

Или на Unix нормальным решением будет fork ()

0 голосов
/ 05 мая 2011

Вы можете использовать разделы omp или использовать pthread / наблюдаем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...