社区
C++ Builder
帖子详情
送100分:线程处理问题
fromv
2002-10-21 12:10:50
我在主程序中设置了一个数据缓冲区,想编一个线程来处理它。哪位能提供思路和原码?货到送分!
...全文
55
5
打赏
收藏
送100分:线程处理问题
我在主程序中设置了一个数据缓冲区,想编一个线程来处理它。哪位能提供思路和原码?货到送分!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
warton
2002-10-30
打赏
举报
回复
看我的代码,socket api,多线程:
#define WSVERS MAKEWORD(2, 0)
#define STKSIZE 16536
#include <stdio.h >
#include <winsock2.h >
#include <process.h >
int TCP_Echo(SOCKET,struct sockaddr_in);
int main()
{
struct sockaddr_in fsin, sin;
SOCKET msock, ssock;
struct hostent *hostname;
unsigned short port = 10000;
int alen;
WSADATA wsadata;
if (WSAStartup(WSVERS, &wsadata) != 0)
{
printf( "调用winsock.dll失败! ");
return -1;
}
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr =inet_addr( "192.168.4.142 "); //
sin.sin_port = htons(port);
msock = socket(PF_INET, SOCK_STREAM, 0);
if (msock == INVALID_SOCKET)
{
printf( "create socket error\n ");
return -1;
}
if (bind(msock, (struct sockaddr *)&sin, sizeof(sin))==SOCKET_ERROR)
{
printf( "bind error\n ");
return -1;
}
if (listen(msock, 5)==SOCKET_ERROR)
{
printf( "listen error\n ");
return -1;
}
//hostname=gethostbyaddr(inet_ntoa(sin.sin_addr),8,0);
//printf( "%s\n ",hostname- >h_name);
printf( "本地地址:%s\n ",inet_ntoa(sin.sin_addr));//
printf( "服务器监听端口:%d\n ",ntohs(sin.sin_port));
while(1)
{
alen = sizeof(struct sockaddr);
ssock = accept(msock, (struct sockaddr *)&fsin, &alen);
if (ssock == INVALID_SOCKET)
{
printf( "accept error\n ");
return -1;
}
printf( "有客户连接自 %s\r\n ", inet_ntoa(fsin.sin_addr));
if (_beginthread(TCP_Echo, STKSIZE, (void*)ssock) <0)
{
printf( "启动新线程失败!\n ");
return -1;
}
}
}
//线程要调用的函数:处理客户发送来的数据
int TCP_Echo(SOCKET fd,struct sockaddr_in sin)
{
char buf[4096];
int cc = 0;
memset(buf, 0, sizeof(buf));
strcpy(buf, "Enter 'Q' to exit\r\n ");
if (send(fd, buf, strlen(buf), 0)==SOCKET_ERROR)
{
printf( "echo send error\n ");
return -1;
}
memset(buf, 0, sizeof(buf));
cc = recv(fd, buf, sizeof(buf), 0);
printf( "客户发送的数据:%s\n ", buf);
while(cc!=SOCKET_ERROR && cc > 0)
{
if (send(fd, buf, cc, 0)==SOCKET_ERROR)
{
printf( "echo send error\n ");
break;
}
/* if (send(fd, "\r\n ", 2, 0)==SOCKET_ERROR)
{
printf( "echo send error\n ");
break;
}*/
memset(buf, 0, sizeof(buf));
cc = recv(fd, buf, sizeof(buf), 0);
printf( "客户发送的数据:%s\n ", buf);
if (buf[0]=='Q')
{
_endthread();
// return 0;
break;
}
}
if (cc==SOCKET_ERROR)
printf( "echo recv error\n ");
closesocket(fd);
return 0;
}
fromv
2002-10-21
打赏
举报
回复
主窗体上有两个Memo,将Memo1输入的值转换为数据包,写入缓冲区。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Buf[1024];
char *str = new char[128];
memset(str,0,128);
StrCat(str,"%");//数据包开始标记
StrCat(str,Memo1->Lines->Text.c_str());
StrCat(str,"%");");//数据包结束标记
for(int i = 0;i<100;i++)
{
StrCat(Buf,Str);
}
}
想用线程来处理缓冲区:先识别数据包标记,然后将数据显示在Memo2中,删除这个数据包,接着处理下一条数据包。
fromv
2002-10-21
打赏
举报
回复
主窗体上有两个Memo,将Memo1输入的值转换为数据包,写入缓冲区。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Buf[1024];
char *str = new char[128];
memset(str,0,128);
StrCat(str,"%");//数据包开始标记
StrCat(str,Memo1->Lines->Text.c_str());
StrCat(str,"%");");//数据包结束标记
for(int i = 0;i<100;i++)
{
StrCat(Buf,Str);
}
}
想用线程来处理缓冲区:先识别数据包标记,然后将数据显示在Memo2中,删除这个数据包,接着处理下一条数据包。
fromv
2002-10-21
打赏
举报
回复
主窗体上有两个Memo,将Memo1输入的值转换为数据包,写入缓冲区。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Buf[1024];
char *str = new char[128];
memset(str,0,128);
StrCat(str,"%");//数据包开始标记
StrCat(str,Memo1->Lines->Text.c_str());
StrCat(str,"%");");//数据包结束标记
for(int i = 0;i<100;i++)
{
StrCat(Buf,Str);
}
}
想用线程来处理缓冲区:先识别数据包标记,然后将数据显示在Memo2中,删除这个数据包,接着处理下一条数据包。
大大怪老张
2002-10-21
打赏
举报
回复
你可以用线程来设置并管理这个数据缓冲区...
你要怎么处理?
Java多
线程
:多
线程
同步安全
问题
的 “三“ 种
处理
方式 ||多
线程
”死锁“ 的避免 || 单例模式”懒汉式“的
线程
同步安全
问题
当多个
线程
在操作同一个进程共享的数据的时候,一个
线程
对共享数据的执行仅仅只执行了一部
分
,还没有执行完,另一个
线程
参与进来执行。去操作所有
线程
共享的数据,导致共享数据的错误。就相当于生活当中:你上厕所,你上到一半还没有上完,另外一个人,就来占用你这个茅坑上厕所。解决办法对于多
线程
操作共享数据时,只能有一个
线程
操作,其他
线程
不可以操作共享数据的内容,只有当一个
线程
对共享数据操作完了,其他
线程
才可以操作共享数据。
进程与
线程
:
线程
2.2
线程
在传统操作系统中 ,每个进程有一个地址空间和一个控制
线程
。事实上,这几乎就是进程的定义 。 不过,经常存在在同一个地址空间中准并行运行多个控制
线程
的情形 ,这些钱程就像(差不多)
分
离的 进程 〈共享地址空间除外)。在下面各节中,我们将讨论这些情形及其实现 。 2.2.1
线程
的使用(Thread Usage) 为什么人们需要在一个进程中再有一类进程 ?有若干理由说明产生这些迷你...
[嵌入式系统-57]:RT-Thread-内核:
线程
间同步(互斥是一种特殊同步)
所谓优先级翻转,即当一个高优先级
线程
试图通过信号量机制访问共享资源时,如果该信号量已被一低优先级
线程
持有,而这个低优先级
线程
在运行过程中可能又被其它一些中等优先级的
线程
抢占,因此造成高优先级
线程
被许多具有较低优先级的
线程
阻塞,实时性难以得到保证。优先级继承是指,提高某个占有某种资源的低优先级
线程
的优先级,使之与所有等待该资源的
线程
中优先级最高的那个
线程
的优先级相等,然后执行,而当这个低优先级
线程
释放该资源时,优先级重新回到初始设定。如果互斥量没有被其他
线程
控制,那么申请该互斥量的
线程
将成功获得该互斥量。
Java 多
线程
批量
处理
数据
在项目开发中需要
处理
100
万多的数据,这些数据需要从mysql数据库中读取出来,再通过调用其他平台的接口推
送
数据。由于时间紧迫,数据需要在短时间内完成推
送
,采用单
线程
推
送
很慢,所以采用多
线程
推
送
来提高效率。
2024年最新Jmeter
线程
组和同步定时器!_
线程
数和synchronizing timer,2024年最新
送
大厂面经一份
为10个,跑完后得到:理解为:(10个
线程
数)10个人,每个人都要跑这10个请求,所以:10*10=
100
:并发数:
100
;
线程
数:10PS:
线程
组也可以看作是一个虚拟用户组。
线程
组中的每一个
线程
都可以理解为一个虚拟用户。
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章