Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LibEvent发送数据的最佳方式 我有一个使用LIB事件的多线程C++应用程序。接收全部在libevent进程中发生,然后设置一个标志,以便稍后处理接收到的数据。在发送过程中,出现了问题。我处于“主线程”中,要发送的数据被组装,然后调用以下函数 int SocketWrapper :: SendData( const U8* buffer, int length ) { if( m_useLibeventToSend ) { bufferevent* bev = GetBufferEvent(); struct evbuffer* outputBuffer = bufferevent_get_output( bev ); evbuffer_lock( outputBuffer ); int result = evbuffer_add( outputBuffer, buffer, length ); evbuffer_unlock( outputBuffer ); return result; } return send( m_socketId, (const char* )buffer, length, 0 ); }_C++_Multithreading_Sockets_Libevent - Fatal编程技术网

使用LibEvent发送数据的最佳方式 我有一个使用LIB事件的多线程C++应用程序。接收全部在libevent进程中发生,然后设置一个标志,以便稍后处理接收到的数据。在发送过程中,出现了问题。我处于“主线程”中,要发送的数据被组装,然后调用以下函数 int SocketWrapper :: SendData( const U8* buffer, int length ) { if( m_useLibeventToSend ) { bufferevent* bev = GetBufferEvent(); struct evbuffer* outputBuffer = bufferevent_get_output( bev ); evbuffer_lock( outputBuffer ); int result = evbuffer_add( outputBuffer, buffer, length ); evbuffer_unlock( outputBuffer ); return result; } return send( m_socketId, (const char* )buffer, length, 0 ); }

使用LibEvent发送数据的最佳方式 我有一个使用LIB事件的多线程C++应用程序。接收全部在libevent进程中发生,然后设置一个标志,以便稍后处理接收到的数据。在发送过程中,出现了问题。我处于“主线程”中,要发送的数据被组装,然后调用以下函数 int SocketWrapper :: SendData( const U8* buffer, int length ) { if( m_useLibeventToSend ) { bufferevent* bev = GetBufferEvent(); struct evbuffer* outputBuffer = bufferevent_get_output( bev ); evbuffer_lock( outputBuffer ); int result = evbuffer_add( outputBuffer, buffer, length ); evbuffer_unlock( outputBuffer ); return result; } return send( m_socketId, (const char* )buffer, length, 0 ); },c++,multithreading,sockets,libevent,C++,Multithreading,Sockets,Libevent,此函数有时会在evbuffer_add调用时崩溃,但99.9%的时间它工作正常。这闻起来像一个并发错误,可能与客户端崩溃或来来往往有关。我确保在libevent最初创建套接字的过程中,我执行了以下操作: struct evbuffer* outputBuffer = bufferevent_get_output( GetBufferEvent() ); evbuffer_enable_locking( outputBuffer, NULL ); 你对我应该做的其他特殊初始化有什么想法吗?我是否

此函数有时会在evbuffer_add调用时崩溃,但99.9%的时间它工作正常。这闻起来像一个并发错误,可能与客户端崩溃或来来往往有关。我确保在libevent最初创建套接字的过程中,我执行了以下操作:

struct evbuffer* outputBuffer = bufferevent_get_output( GetBufferEvent() );
evbuffer_enable_locking( outputBuffer, NULL );
你对我应该做的其他特殊初始化有什么想法吗?我是否应该从主线程调用“SendData”,而是向bufferevent发送一个事件,以便发送与libevent在同一进程中发生

所有的设计理念都是开放的。到目前为止,我的解决方法是不将libevent用于发送,而是直接写入套接字

此崩溃发生在版本和调试中,VS 2008,libevent 2.0。它在库中很深,所以我会尝试在我的项目中包含c文件,以尝试跟踪我的问题,但这里可能有人会立即知道出了什么问题。:-)