文件未创建

时间:2017-08-03 12:50:17

标签: c++ multithreading pdf libharu

我正在使用gRPC从客户端与服务器进行通信。我正在使用Asynchronous Greeter示例。我希望服务器在客户端向服务器发送消息时创建PDF文件。我有一个名为makefile()的函数,它将创建pdf文件。我目前在Proceed()函数中调用它。这是一个叫它的好地方吗?我的代码大部分都适用,但有时当我将消息发送到服务器时,服务器不会生成文件。例如,如果我尝试10次,则服务器可能只生成8个文件。它应该是10.还可以将makefile()函数放在一个线程中吗?我添加了makefile()代码。我正在使用Libharu pdf lib。

    void Proceed() {
      if (status_ == CREATE) {
        // As part of the initial CREATE state, we *request* that the system
        // start processing SayHello requests. In this request, "this" acts are
        // the tag uniquely identifying the request (so that different CallData
        // instances can serve different requests concurrently), in this case
        // the memory address of this CallData instance.
        service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,

        status_ = PROCESS;
      } else if (status_ == PROCESS) {


        new CallData(service_, cq_);

        // The actual processing.
        std::string prefix("Hello ");
        makefile() // function to make pdf file
        reply_.set_message(prefix + request_.name());

        .
        responder_.Finish(reply_, Status::OK, this);
        status_ = FINISH;
      } else {
        GPR_ASSERT(status_ == FINISH);

        delete this;
      }
    }
  }






   makefile()
    {
     const char *page_title = "Font Demo";
HPDF_Doc  pdf;
char fname[256];
HPDF_Page page;
HPDF_Font def_font;
HPDF_REAL tw;
HPDF_REAL height;
HPDF_REAL width;
HPDF_UINT i;

strcpy (fname, argv[0]);
strcat (fname, ".pdf");

pdf = HPDF_New (error_handler, NULL);
if (!pdf) {
    printf ("error: cannot create PdfDoc object\n");
    return 1;
}

if (setjmp(env)) {
    HPDF_Free (pdf);
    return 1;
}

/* Add a new page object. */
page = HPDF_AddPage (pdf);

height = HPDF_Page_GetHeight (page);
width = HPDF_Page_GetWidth (page);

/* Print the lines of the page. */
HPDF_Page_SetLineWidth (page, 1);
HPDF_Page_Rectangle (page, 50, 50, width - 100, height - 110);
HPDF_Page_Stroke (page);

/* Print the title of the page (with positioning center). */
def_font = HPDF_GetFont (pdf, "Helvetica", NULL);
HPDF_Page_SetFontAndSize (page, def_font, 24);

tw = HPDF_Page_TextWidth (page, page_title);
HPDF_Page_BeginText (page);
HPDF_Page_TextOut (page, (width - tw) / 2, height - 50, page_title);
HPDF_Page_EndText (page);

/* output subtitle. */
HPDF_Page_BeginText (page);
HPDF_Page_SetFontAndSize (page, def_font, 16);
HPDF_Page_TextOut (page, 60, height - 80, "<Standerd Type1 fonts samples>");
HPDF_Page_EndText (page);

HPDF_Page_BeginText (page);
HPDF_Page_MoveTextPos (page, 60, height - 105);

i = 0;
while (font_list[i]) {
    const char* samp_text = "abcdefgABCDEFG12345!#$%&+-@?";
    HPDF_Font font = HPDF_GetFont (pdf, font_list[i], NULL);

    /* print a label of text */
    HPDF_Page_SetFontAndSize (page, def_font, 9);
    HPDF_Page_ShowText (page, font_list[i]);
    HPDF_Page_MoveTextPos (page, 0, -18);

    /* print a sample text. */
    HPDF_Page_SetFontAndSize (page, font, 20);
    HPDF_Page_ShowText (page, samp_text);
    HPDF_Page_MoveTextPos (page, 0, -20);

    i++;
}

HPDF_Page_EndText (page);

HPDF_SaveToFile (pdf, fname);

/* clean up */
HPDF_Free (pdf);
    }

0 个答案:

没有答案