Có cách nào để chạy mã Lua từ chương trình C/C++ ở mức chi tiết hơn so với lệnh gọi hàm "lua_pcall" chuẩn không? Lý tưởng nhất là tôi muốn có thể lặp qua một danh sách các hướng dẫn bytecode mức thấp (giả sử nó có những thứ như vậy) và chạy chúng từng cái một, để tôi có thể viết bộ lập lịch của riêng mình có nhiều quyền kiểm soát hơn là chỉ chạy một hàm Lua hoàn chỉnh từ đầu đến cuối. Lý do tôi muốn làm điều này là vì tôi muốn thực hiện các chức năng C mà mã Lua có thể gọi sẽ làm cho chương trình đợi cho đến khi một hành động nhất định (có khả năng kéo dài) đã hoàn thành trước khi tiếp tục thực hiện. Sẽ có một tỷ lệ cao các lời gọi hàm như vậy trong một kịch bản Lua điển hình, vì vậy ý tưởng viết lại nó để sử dụng các cuộc gọi lại khi hành động đã hoàn thành không thực sự thực tế.Trình thông dịch Lua mức độ thấp
Trả lời
Có lẽ phụ bước câu hỏi, nhưng bạn có thể sử dụng Lua coroutines chứ không phải là tùy chỉnh C công cụ để chờ đợi cho đến khi một số sự kiện xảy ra.
Ví dụ, một coroutine có thể gọi hàm waitForEvent(). Trong đó, bạn có thể chuyển sang một coro khác cho đến khi sự kiện đó xảy ra, sau đó tiếp tục sự kiện đầu tiên. Hãy xem the lua coro docs để biết thêm về điều đó.
Trợ giúp debugging interface có giúp ích không?
Đề xuất của Jder để sử dụng coroutines sẽ hoạt động rất tốt nếu bạn có thể viết những thói quen chờ đợi lâu dài của C bằng cách sử dụng tính năng luồng hợp tác (tính năng rõ ràng) của Lua. Bạn vẫn sẽ sử dụng lua_pcall() để vào Lua, nhưng điểm vào sẽ là hàm quản lý coroutine của bạn.
Điều này chỉ hoạt động mặc dù nếu các thói quen C không làm bất cứ điều gì trong khi họ chờ đợi. Nếu chúng chạy dài vì chúng tính toán ví dụ, thì bạn cần chạy nhiều luồng hệ điều hành. Lua là luồng an toàn - chỉ cần tạo nhiều luồng và chạy lua_open() trong mỗi luồng.
Từ http://www.lua.org/pil/24.1.html
Thư viện Lua định nghĩa không biến toàn cầu ở tất cả. Nó giữ tất cả trạng thái trong cấu trúc động lua_State và một con trỏ tới cấu trúc này được chuyển thành một đối số cho tất cả các hàm bên trong Lua. Triển khai này làm cho Lua reentrant và sẵn sàng để sử dụng trong mã đa luồng .
Bạn cũng có thể kết hợp hai phương pháp tiếp cận. Nếu bạn có một hàm Lua bao bọc để bắt đầu một chuỗi hệ điều hành, bạn có thể sinh lợi sau khi bạn bắt đầu luồng. Người quản lý coroutine sẽ theo dõi các chủ đề và tiếp tục một coroutine khi chủ đề nó bắt đầu đã kết thúc. Điều này cho phép bạn sử dụng một trình thông dịch Lua đơn lẻ với nhiều luồng công nhân chạy mã C thuần túy.
Nếu bạn đi theo luồng hệ điều hành, vui lòng xem Lua Lanes. Tôi sẽ thấy nó là giải pháp hoàn hảo cho những gì bạn đang cố gắng đạt được (= ném một mô-đun addon vào hỗn hợp và bạn sẽ làm cho mã rõ ràng, dễ hiểu và đơn giản với đa luồng liền mạch được xây dựng trong).
Vui lòng cho chúng tôi biết sự cố của bạn đã được giải quyết như thế nào. :)
Cảm ơn bạn đã liên kết - Tôi chắc chắn sẽ xem xét điều này – andygeers
- 1. cách tạo quy trình mức toàn vẹn trung bình từ quy trình mức toàn vẹn thấp?
- 2. Tạo âm thanh ở mức độ thấp trong C#?
- 3. Có thông tin tốt về khởi động PC ở mức độ thấp ở đâu?
- 4. Thông dịch viên Lua trên Iphone
- 5. Lập trình độ trễ thấp
- 6. Làm cách nào để khởi chạy quy trình có mức độ ưu tiên thấp? C#
- 7. cần cuốn sách & trang web gợi ý cho tiến trình ở mức độ thấp
- 8. Làm cách nào để xác định mức độ nghiêm trọng (mức độ nghiêm trọng/cao/thấp, v.v.) của các lỗi?
- 9. Lua với trình biên dịch JVM?
- 10. Thấp hơn các ổ cắm bsd chung mức thấp
- 11. Cách thay thế tốt nhất để chờ ... thông báo cho đồng bộ hóa ở mức độ thấp là gì?
- 12. Làm cách nào để khởi chạy từ Eclipse với mức độ ưu tiên Thấp trong Windows?
- 13. Trình thông dịch python chuẩn có chế độ lệnh vi?
- 14. Thông báo về mức độ cô lập được hỗ trợ bởi Sql cho các giao dịch
- 15. Chạy tác vụ ở chế độ nền với mức ưu tiên CPU thấp hơn
- 16. Ở mức độ nào trình biên dịch C# hoặc JIT tối ưu hóa mã ứng dụng?
- 17. Nhập bằng bàn phím mức thấp trên Windows
- 18. Thư viện mạng Java có độ trễ thấp và thấp?
- 19. Lisp không có Bộ thu gom rác để lập trình mức thấp
- 20. C/C++ dịch sang lắp ráp, hành vi bộ nhớ mức thấp: làm thế nào nó được thực hiện?
- 21. Điều gì quyết định mức độ đặc quyền của quy trình?
- 22. Thông dịch viên Erlang: Vi chế độ
- 23. Mức cách ly giao dịch
- 24. Làm cách nào để xác định mức độ hiển thị yêu cầu thấp nhất của phương pháp?
- 25. Tôi có thể tìm hiểu về hoạt động ở mức độ thấp của máy tính ở đâu?
- 26. Bộ lập trình cấp thấp nào nên có trình độ kỹ năng nào?
- 27. Cho một mức độ x, tìm mức độ gần nhất trong một mảng bằng độ
- 28. Chụp ảnh từ webcam ở độ phân giải cao trong khi xem trước ở mức thấp hơn bằng DirectShow.Net
- 29. Thông lượng rất thấp Sử dụng cầu lõi HornetQ
- 30. Biên dịch nhúng lua vào C
Giải pháp này dường như có nhiều tiềm năng - đặc biệt khi API C có thể sinh/tiếp tục coroutines. – andygeers