C 如何并行运行任务?
上面的代码是服务器代码,通过ip地址和端口号接受来自客户端的连接。我正在接受连接并从客户端接收数据。我想在后台运行TimerTask,timer task每2ms、10ms和100ms调用一个名为TASK1、TASK2和TASK3的函数。那么如何在后台运行这些函数。请有人帮帮我。如果你想让事情并行运行,你可以使用线程进行多线程处理,或者使用forks进行多处理 下面是一个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
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 ...
}
}