Hello! Thanks for response, Dimiter. Thing is that same code also works for me perfectly. But once I add at least one operation under data in consumer thread - boom, OUT OF MEMORY. I was expecting that HWM should help but I guess I still settings something wrong.
Serg В Срд, 18/01/2012 в 18:54 -0800, Dimiter 'malkia' Stanev пишет: > I'm using latest libzmq-3.1.0 so some of the functions changed a bit. > > I'm also a "C" coder more than "C++", and never used boost, but that to > be said, this example did not ever made problem for me: > > I was using my own built zmq.dll from luajit ffi bindings that I keep: > https://github.com/malkia/ufo/tree/master/bin/Windows/x86 > > // file: a.c > // compile with: cl -O2 -MD a.c > // I'm using Windows WDK 7.1, but Windows SDK 7.1, or Visual Studio > prompt should work too > > #include <process.h> > #include <assert.h> > #include <stdlib.h> > #include <stdio.h> > #include "..\..\..\..\libzmq\include\zmq.h" > > #pragma comment(lib,"zmq") > > #define INTERNAL_DATA_SOCKET "inproc://data" > #define MESSAGE "{\"m_t\": 0, \"data\": {}}" > > void *context; > static char msg[] = MESSAGE; > > unsigned __stdcall outputWorker(void*); > > int main(int argc, char* argv[]) { > void* intDataSocket; > int messagesToStore = 1; > > context = zmq_init(1); > _beginthreadex(NULL, 0, outputWorker, NULL, 0, NULL); > > intDataSocket = zmq_socket(context, ZMQ_PUB); > printf("intDataSocket=%d\n",intDataSocket); > printf("zmq_connect=%d\n",zmq_connect(intDataSocket, > INTERNAL_DATA_SOCKET)); > printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket, > ZMQ_SNDHWM, &messagesToStore, sizeof(messagesToStore))); > printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket, > ZMQ_RCVHWM, &messagesToStore, sizeof(messagesToStore))); > > while(1) { > int rc = zmq_send(intDataSocket, msg, sizeof(msg), 0); > assert(rc == sizeof(msg)); > } > return 0; > } > > unsigned __stdcall outputWorker(void*a) { > void *intDataSocket = zmq_socket(context, ZMQ_SUB); > printf("zmq_bind=%d\n",zmq_bind(intDataSocket, > INTERNAL_DATA_SOCKET)); > printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket, > ZMQ_SUBSCRIBE, "", 0)); > > while(1) { > char buf[sizeof(msg)]; > int rc = zmq_recv(intDataSocket, buf, sizeof(buf), 0); > assert(rc = sizeof(buf)); > } > > return 0; > } > > On 1/18/2012 4:24 PM, Serg Gulko wrote: > > Correction - lines 59, 60 and 62 > > > > On Wed, Jan 18, 2012 at 7:07 PM, Serg Gulko <[email protected] > > <mailto:[email protected]>> wrote: > > > > Hello! > > > > Thanks for hint, I really was using HWM incorrectly. I changed it > > according spec but problem is still here.. > > > > http://pastebin.com/tDFpbhM0 > > > > > > But when I commented any operations on subscriber part(lines 68, 69, > > 70 and 71) everything working without problems. > > > > Serg > > On Wed, Jan 18, 2012 at 3:46 PM, Chuck Remes <[email protected] > > <mailto:[email protected]>> wrote: > > > > > > On Jan 18, 2012, at 2:32 PM, Serg Gulko wrote: > > > > > Yes, in this example I using constant size message(22 bytes) > > - I want keep only one 22 bytes message. > > > Or I wrong? > > > > You are wrong. For HWM, you pass the *number of messages*. What > > your code does is pass the *number of bytes*. That is incorrect. > > > > Change it to set the HWM to 1. There are lots of C code examples > > in the guide. Refer to one of those examples for the exact syntax. > > > > cr > > > > _______________________________________________ > > zeromq-dev mailing list > > [email protected] <mailto:[email protected]> > > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > > > > > > > > > > > > _______________________________________________ > > zeromq-dev mailing list > > [email protected] > > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > _______________________________________________ > zeromq-dev mailing list > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
