C 如何并行运行任务?

C 如何并行运行任务?,c,multithreading,sockets,winapi,timer,C,Multithreading,Sockets,Winapi,Timer,上面的代码是服务器代码,通过ip地址和端口号接受来自客户端的连接。我正在接受连接并从客户端接收数据。我想在后台运行TimerTask,timer task每2ms、10ms和100ms调用一个名为TASK1、TASK2和TASK3的函数。那么如何在后台运行这些函数。请有人帮帮我。如果你想让事情并行运行,你可以使用线程进行多线程处理,或者使用forks进行多处理 下面是一个c语言中的多线程示例: int CreateSocket() { // SOCKET connectedSocke

上面的代码是服务器代码,通过ip地址和端口号接受来自客户端的连接。我正在接受连接并从客户端接收数据。我想在后台运行TimerTask,timer task每2ms、10ms和100ms调用一个名为TASK1、TASK2和TASK3的函数。那么如何在后台运行这些函数。请有人帮帮我。

如果你想让事情并行运行,你可以使用线程进行多线程处理,或者使用forks进行多处理

下面是一个c语言中的多线程示例:

int CreateSocket() 
{




//  SOCKET connectedSocket;
//  SOCKADDR_IN addr;

//  char buf[256];
//  char buf2[300];
  // Winsock starten
    HANDLE h1,h2,h3;

double Task2ms_Raster, Task10ms_Raster, Task100ms_Raster ;
long rc;
 SOCKET acceptSocket;



   rc=startWinsock();
  if(rc!=0)

  {

    printf("Fehler: startWinsock, fehler code: %d\n",rc);

    return 1;

  }

  else

  {

    printf("Winsock gestartet!\n");

  }

  // Socket erstellen

  acceptSocket=socket(AF_INET,SOCK_STREAM,0);

  if(acceptSocket==INVALID_SOCKET)

  {

    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());

    return 1;

  }

  else

  {

    printf("Socket erstellt!\n");

  }

memset(&addr,0,sizeof(SOCKADDR_IN));

addr.sin_family=AF_INET;

addr.sin_port=htons(port);

addr.sin_addr.s_addr=htonl(INADDR_ANY);

rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));

if(rc==SOCKET_ERROR)

{

  printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());

  return 1;

}

else

{

  printf("Socket an port %d gebunden\n",port);

}


rc=listen(acceptSocket,10);

if(rc==SOCKET_ERROR)

{

  printf("Fehler: listen, fehler code: %d\n",WSAGetLastError());

  return 1;

}

else

{

  printf("acceptSocket ist im listen Modus....\n");

}

connectedSocket=accept(acceptSocket,NULL,NULL);

if(connectedSocket==INVALID_SOCKET)

{

  printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());

  return 1;

}

else

{

  printf("Neue Verbindung wurde akzeptiert!\n");

//    strcpy(buf,"Hallo wie gehts?");

//    rc=send(acceptSocket,buf,9,0);

      // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
      printf("Server hat die Verbindung getrennt..\n");
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
      break;
    }
    XcpIp_RxCallback( (uint16) rc, (uint8*) buf, (uint16) port );


 h1=TimerTask(2,TASK1,&Task2ms_Raster);
 h2=TimerTask(10,TASK2,&Task10ms_Raster);
 h3=TimerTask(100,TASK3,&Task100ms_Raster);


  }
}
  closesocket(acceptSocket);
  closesocket(connectedSocket);
  XcpIp_OnTcpCxnClosed((uint16) port );
  WSACleanup();
  return 0;
}
#包括
无效handleClient(套接字客户端sock)
{
…读写。。。
}
int main()
{
…准备服务器。。。
…在插座上听。。。
对于(;;){
connectedSocket=accept(acceptSocket,NULL,NULL);
pthread_t*tid=malloc(sizeof(pthread_t));
pthread_创建(&tid,NULL,handleClient,connectSocket);
…测试,服务器是否应该被终止,并中断循环。。。
}
}

注意,这是一个非常简单的例子。您还应该注意使用
pthread_-join(tid,NULL)来“收集线程”pthread\u t
变量存储在数组或链表中。

在后台运行
是什么意思?该窗口是否在Windows中不可见,或者是否需要两个线程/进程同时运行?它应该与接收数据并行运行。
#include <pthread.h>

void handleClient(SOCKET clientSock)
{
... read and write ...
}

int main()
{
    ... prepare the server ...
    ... listen on socket ...
    for(;;){
        connectedSocket=accept(acceptSocket,NULL,NULL);        
        pthread_t *tid = malloc( sizeof(pthread_t) );   
        pthread_create( &tid, NULL, handleClient, connectSocket );

        ... test, if the server should be killed, and break the loop ...
    }
}