Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
November 21, 2018 Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Hi, I translated the CPP example of a windows service to D. https://docs.microsoft.com/en-us/windows/desktop/Services/svc-cpp I wonder how can I integrate a vibe.d http server here: __gshared HANDLE ghSvcStopEvent = NULL; VOID SvcInit(DWORD dwArgc, LPTSTR* lpszArgv) { ghSvcStopEvent = CreateEvent(NULL, // default security attributes TRUE, // manual reset event FALSE, // not signaled NULL); // no name if (ghSvcStopEvent == NULL) { ReportSvcStatus(SERVICE_STOPPED, NO_ERROR, 0); return; } ReportSvcStatus(SERVICE_RUNNING, NO_ERROR, 0); // TO_DO: Perform work until service stops. while (1) { WaitForSingleObject(ghSvcStopEvent, INFINITE); ReportSvcStatus(SERVICE_STOPPED, NO_ERROR, 0); return; } } WaitForSingleObject will wait forever until ghSvcStopEvent will be filled (by extern (Windows) VOID SvcCtrlHandler(DWORD dwCtrl) nothrow). Do you have any proposal how to integrate vibe.d here? Kind regards André |
November 21, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | Start vibe in another thread and return from ServiceMain, see https://docs.microsoft.com/en-us/windows/desktop/Services/service-servicemain-function also ideally you should report running state only after vibe initialized, opened sockets and started listening, before that it's not really running. |
November 21, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin | On Wednesday, 21 November 2018 at 15:05:31 UTC, Kagamin wrote:
> Start vibe in another thread and return from ServiceMain, see https://docs.microsoft.com/en-us/windows/desktop/Services/service-servicemain-function also ideally you should report running state only after vibe initialized, opened sockets and started listening, before that it's not really running.
Thanks a lot. I will try.
Kind regards
Andre
|
November 23, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin | On Wednesday, 21 November 2018 at 15:05:31 UTC, Kagamin wrote: > Start vibe in another thread and return from ServiceMain, see https://docs.microsoft.com/en-us/windows/desktop/Services/service-servicemain-function also ideally you should report running state only after vibe initialized, opened sockets and started listening, before that it's not really running. I tried to wrap WaitForSingleObject into a Fiber by using command runTask. In theory it should work fine but the service (app) just crash without any information on an empty runTask function. Also calling listenHTTP crashes the service. Here I am able to catch the Error "eventcore.core static constructor didn't run!?". I created a github issue with complete source code here https://github.com/vibe-d/vibe-core/issues/105 Kind regards Andre |
November 23, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | You don't need to initialize runtime because it's initialized by standard D startup code, but you need to attach threads that are not created by D or static constructors won't be run and only C-level code would work there. |
November 23, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kagamin | On Friday, 23 November 2018 at 21:27:26 UTC, Kagamin wrote:
> You don't need to initialize runtime because it's initialized by standard D startup code, but you need to attach threads that are not created by D or static constructors won't be run and only C-level code would work there.
Thank you, I wasn't aware of this. For references, I found this post which explains thread_attachThis. I assume you meant this function.
Kind regards
Andre
|
November 23, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | On Friday, 23 November 2018 at 21:35:57 UTC, Andre Pany wrote: > On Friday, 23 November 2018 at 21:27:26 UTC, Kagamin wrote: >> You don't need to initialize runtime because it's initialized by standard D startup code, but you need to attach threads that are not created by D or static constructors won't be run and only C-level code would work there. > > Thank you, I wasn't aware of this. For references, I found this post which explains thread_attachThis. I assume you meant this function. > > Kind regards > Andre Post explaining thread_attachThis https://forum.dlang.org/thread/ounui4$171a$1@digitalmars.com |
November 27, 2018 Re: Integrate vibe.d into Windows Service | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Pany | On Wednesday, 21 November 2018 at 09:59:19 UTC, Andre Pany wrote: > Hi, > > I translated the CPP example of a windows service to D. > https://docs.microsoft.com/en-us/windows/desktop/Services/svc-cpp > > [...] Today I needed this too, and after some searching I came across this package which works ok for me with vibed: https://code.dlang.org/packages/daemonize |
Copyright © 1999-2021 by the D Language Foundation