开发一个server 共有三个client 连上来 分别提供3个port 现在的做法是 打算用一个主线程来跑住业务逻辑 利用共享的fd在主线程做数据收发 子线程做socket连接监控。 将sockid sockfd 以及公共数据(ip,port信息等)全部放在主线程顶部 做全局变量共享 socket连接监控: 在子线程中接受一个sockfd之后,进入for,将子线程阻塞在 accept(...)处, client重连之后 直接覆盖上个fd,实现断线重连 现在问题是: 如果在子线程中全部使用...
by senic - C/C++ - 2008-08-12 11:52:12 阅读(1452) 回复(2)
我使用了两个线程,程序开始执行正常,执行几次,出现程序Segmentation Fault (core dumped)错误,之后等会,再执行,程序又执行正确,大家看看这个是内存溢出还是多线程的问题? 好像找到问题了,我编写了一个动态库,调用测试程序中零时分配的数组变量出现的问题,如果在动态库里面分配一个全局数组变量好像就没有这个问题,大家看看这是什么原因呢? 另外,在线程的执行函数里面写下面的线程等待语句无效? pthread_join(th...
class myClass : public ACE_Event_Handler { public: //回调函数 int handle_input(ACE_HANDLE) { m_sockfd.recv(buffer,1024,remoteAddr); } ACE_SOCK_Dgram m_sockfd; }; 这个是ACE写的代码,用来监听UDP端口,m_sockfd是用来接收数据的类似SOCKET的东西。 handle_input是回调函数,当有数据到达是被自动调用,好象是在一个新的线程执行的。 我的问题是 m_sockfd.recv(buffer,1024,remoteAddr); 这句会不会有问题,因...
void CreateCppiDay(void *argv[]) { if(pthread_mutex_lock(&mutex) != 0) exit(1); memset(caCntday, 0x00, sizeof(caCntday)); memset(caFlag, 0x00, sizeof(caFlag)); printf("%s\n",argv[0]); if(pthread_mutex_unlock(&mutex) != 0) exit(1); exit(0); } main() { int i=0; char caPara[30]; for(i=0;i<3;i++) { memset(caPara,0x00,sizeof(caPara)); sprintf(caPara,"%s|%d|","20060116"...
代码大概如下(代码可能有问题,只是表达一个意思) char *pp;//全局变量 thread_1: { ... char *ptr=(char *)malloc(1024); pp=ptr; ... return NULL; } thread_2: { ... char p2[1024]; strcpy(p2,pp); free(pp); .... return NULL; } 这种方法中在thread_1退出的时候他所分配的1024内存会不会被释放掉(我没有在thread_1中free)?我的想法是:因为线程之间是共享heap区的,是不是...
pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS); pthread_attr_setstacksize(&attr,512); if(pthread_create(&tid,&attr, func, (void *)arg)) { perror("error pthread_create"); } 我都这样子了,可线程开到307之后就报 error pthread_create: Cannot allocate memory这个错误 我用 ulimit -a 查看 core file size (blocks, -c) 0 data seg size (kbytes, -d) u...
我的程序主程序中用g_timeout_add来定期更新UI,当有一个新任务的时候,创建一个新线程来处理,通讯获得的数据会自动修改, 定时更新UI的主线程会取出那些数据更新到UI上,但是我发现,我的程序在运行过程中(通讯线程没有完成所有工作之前)UI不会被更新,完成才更新.请问为什么,我是想显示进度的.
请各位帮帮忙 我用2个线程读2个文件到内存中,如果只创建一个线程,能够正确运行。但是创建两个就报错Segmentation fault, 请问是哪里的问题?谢谢。 线程函数如下: void* read_seq(void* reads_file) { vecbasevector* tmp_reads = new vecbasevector; String* filename = (String*) reads_file; LoadReads(*tmp_reads, *filename); pthread_exit((void*)tmp_reads); }