Changeset 3600
- Timestamp:
- Mar 30, 2013 1:06:17 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/vtkvis/RpVtkRenderServer.cpp
r3535 r3600 405 405 initService() 406 406 { 407 TRACE("Enter"); 408 407 409 const char *user = getenv("USER"); 408 410 char *logName = NULL; … … 433 435 free(logName); 434 436 } 437 438 TRACE("Leave"); 435 439 } 436 440 … … 438 442 exitService() 439 443 { 444 TRACE("Enter"); 445 440 446 serverStats(0); 441 447 … … 448 454 449 455 #ifdef USE_THREADS 450 static void *451 readerThread(void *clientData)452 {453 ResponseQueue *queue = (ResponseQueue *)clientData;454 Tcl_Interp *interp;455 456 TRACE("Starting reader thread");457 interp = (Tcl_Interp *)queue->clientData();458 vtkSmartPointer<vtkUnsignedCharArray> imgData =459 vtkSmartPointer<vtkUnsignedCharArray>::New();460 for (;;) {461 if (processCommands(interp, (ClientData)clientData, g_inBufPtr, g_fdOut) < 0)462 break;463 464 if (g_renderer->render()) {465 TRACE("Rendering new frame");466 g_renderer->getRenderedFrame(imgData);467 queueFrame(queue, imgData);468 g_stats.nFrames++;469 g_stats.nFrameBytes += imgData->GetDataSize() * imgData->GetDataTypeSize();470 } else {471 TRACE("No render required");472 sendAck((ClientData)clientData, g_fdOut);473 }474 475 if (g_inBufPtr->status() == ReadBuffer::ENDFILE)476 break;477 }478 return NULL;479 }480 456 481 457 static void * … … 530 506 Tcl_Interp *interp = Tcl_CreateInterp(); 531 507 508 ClientData clientData = NULL; 532 509 #ifdef USE_THREADS 533 510 ResponseQueue *queue = new ResponseQueue((void *)interp); 534 initTcl(interp, (ClientData)queue); 535 536 pthread_t readerThreadId, writerThreadId; 537 if (pthread_create(&readerThreadId, NULL, &readerThread, queue) < 0) { 538 ERROR("Can't create reader thread: %s", strerror(errno)); 539 } 511 clientData = (ClientData)queue; 512 initTcl(interp, clientData); 513 514 pthread_t writerThreadId; 540 515 if (pthread_create(&writerThreadId, NULL, &writerThread, queue) < 0) { 541 516 ERROR("Can't create writer thread: %s", strerror(errno)); 542 517 } 543 if (pthread_join(readerThreadId, NULL) < 0) { 544 ERROR("Can't join reader thread: %s", strerror(errno)); 545 } else { 546 TRACE("Reader thread exited"); 547 } 518 #else 519 initTcl(interp, clientData); 520 #endif 521 522 vtkSmartPointer<vtkUnsignedCharArray> imgData = 523 vtkSmartPointer<vtkUnsignedCharArray>::New(); 524 525 // Start main server loop 526 for (;;) { 527 if (processCommands(interp, clientData, g_inBufPtr, g_fdOut) < 0) 528 break; 529 530 if (g_renderer->render()) { 531 TRACE("Rendering new frame"); 532 g_renderer->getRenderedFrame(imgData); 533 #ifdef USE_THREADS 534 queueFrame(queue, imgData); 535 #else 536 writeFrame(g_fdOut, imgData); 537 #endif 538 g_stats.nFrames++; 539 g_stats.nFrameBytes += imgData->GetDataSize() * imgData->GetDataTypeSize(); 540 } else { 541 TRACE("No render required"); 542 sendAck(clientData, g_fdOut); 543 } 544 545 if (g_inBufPtr->status() == ReadBuffer::ENDFILE) 546 break; 547 } 548 #ifdef USE_THREADS 548 549 // Writer thread is probably blocked on sem_wait, so cancel instead 549 550 // of joining … … 557 558 delete queue; 558 559 queue = NULL; 559 #else560 initTcl(interp, (ClientData)NULL);561 562 vtkSmartPointer<vtkUnsignedCharArray> imgData =563 vtkSmartPointer<vtkUnsignedCharArray>::New();564 for (;;) {565 if (processCommands(interp, (ClientData)NULL, g_inBufPtr, g_fdOut) < 0)566 break;567 568 if (g_renderer->render()) {569 TRACE("Rendering new frame");570 g_renderer->getRenderedFrame(imgData);571 writeFrame(g_fdOut, imgData);572 g_stats.nFrames++;573 g_stats.nFrameBytes += imgData->GetDataSize() * imgData->GetDataTypeSize();574 } else {575 TRACE("No render required");576 }577 578 if (g_inBufPtr->status() == ReadBuffer::ENDFILE)579 break;580 }581 560 #endif 582 561
Note: See TracChangeset
for help on using the changeset viewer.