Hello, Here is some sample code to run:
USING: alien io kernel threads.private windows.kernel32 windows.types ; IN: examples.windows.threads : eternity ( -- ) eternity ; : <ThreadProc> ( -- alien ) DWORD { LPVOID } stdcall [ drop eternity 0 ] alien-callback ; : start-thread ( -- handle ) f 0 <ThreadProc> f 0 f CreateThread ; : main ( -- ) start-thread drop "I am here" print flush 20,000,000,000 (sleep) ; MAIN: main As you can see, it taxes the cpu 100% which proves that the thread is running. Then something triggers a gc and it crashes. It is not unexpected. You are kind of entering unexplored territory here. No one has ensured that factor works correctly when running kernel threads containing factor code. You aren't meant to do it. However, you can start and run a thread written in C++ in the VM using start_thread() as long as you are careful not to mess with the factor_vm object in unapproved ways. You can see how it is done in start_sampling_profiler_timer() in vm/os-windows.cpp. I still don't understand how you can get that thread to trap the ctrl+break key combo. But if you can, then great! 2016-05-27 22:16 GMT+02:00 Alexander Ilin <ajs...@yandex.ru>: > Hello! > > 27.05.2016, 20:00, "Björn Lindqvist" <bjou...@gmail.com>: >> Try defining <ThreadProc> like this: >> >> : <ThreadProc> ( -- alien ) DWORD { LPVOID } stdcall [ ] alien-callback ; > > Tried this, see below. > > I'm now at home, trying these things on Win 8.1 64-bit, on a freshly > bootstrapped Factor. (For some reason the build.cmd produced a 32-bit > executable, even though I'm on a 64-bit system.) The Windows Error Reporting > tool (WerFault.exe) says that an exception is happening. Sometimes I get to > see some kind of dumps in the console, sometimes not. > > Here's my code: > > USING: kernel windows.kernel32 > alien alien.data alien.syntax windows.types ; > IN: my-thd > > LIBRARY: kernel32 > > FUNCTION: HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, > SIZE_T dwStackSize, > LPVOID lpStartAddress, > LPVOID lpParameter, > DWORD dwCreationFlags, > LPDWORD lpThreadId ) > > CALLBACK: DWORD ThreadProc ( LPVOID lpParameter ) > > : <ThreadProc> ( -- alien ) > [ [ t ] [ ] while ] ThreadProc ; > > > : <ThreadProc-2> ( -- alien ) > DWORD { LPVOID } stdcall [ ] alien-callback ; > > : <ThreadProc-3> ( -- alien ) > DWORD { LPVOID } stdcall [ [ t ] [ ] while ] alien-callback ; > > > : start-thd ( -- hnd ) > f 0 <ThreadProc> f 0 f CreateThread ; > > : start-thd-2 ( -- hnd ) > f 0 <ThreadProc-2> f 0 f CreateThread ; > > : start-thd-3 ( -- hnd ) > f 0 <ThreadProc-3> f 0 f CreateThread ; > > Test runs and results: > start-thd: the app sometimes dies with no output. WerFault sometimes > reports Exception Code c0000409, which Googles to "Stack buffer overflow", > and sometimes c0000005, which is "access violation". Sometimes I see a > console dump, which starts with "fatal_error: Memory protection fault during > gc: <hex-value>". > > start-thd-2: most of the time dies with no output, but once I saw the text > "Error in print-error!" on the console. > > start-thd-3: most of the time dies with no output, but once I saw a message > box with "Memory protection fault at address 0x105" in it. > > Can you help me? I need more code to try. > > ---=====--- > Александр > > ------------------------------------------------------------------------------ > What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic > patterns at an interface-level. Reveals which users, apps, and protocols are > consuming the most bandwidth. Provides multi-vendor support for NetFlow, > J-Flow, sFlow and other flows. Make informed decisions using capacity > planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e > _______________________________________________ > Factor-talk mailing list > Factor-talk@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/factor-talk -- mvh/best regards Björn Lindqvist ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk