EpicSkookumScript / EpicSkookumScript/SkookumScript-Plugin
Coroutine pending_increment does not halt execution of coroutine
- Ngôn ngữ chính
- C++
- Star
- 138
- Fork
- 22
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
**Issue by [error454](https://github.com/error454)**
_Wednesday Jul 03, 2019 at 03:02 GMT_
_Originally opened as https://github.com/SkookumScript/SkookumScript-Plugin/issues/7_
----
**UE4 Version**
4.22
**SkookumScript Version**
4.22
**Describe the bug**
Calling `pending_increment` does not suspend a running coroutine as the documentation alludes to.
> // Increments the number of expressions / tasks currently executing in
> // parallel that the invoked object is waiting for a return value from.
> // If the number was 0 and is increased then the invoked object will be
> // suspended until the pending number is reduced back to 0 by calling
> // pending_decrement().
**To Reproduce**
Run the following sample code in the REPL
```javascript
// Coroutine suspend test
!x : 0
!y : 0
!f : (Integer in)[in += 1]
!c1 : branch[loop[f(x) _wait(1.0)]]
!c2 : branch[loop[f(y) _wait(1.0)]]
race
[
loop
[
println(x, ".", y)
_wait(1.0)
]
[
_wait(2)
c1.pending_increment(1)
_wait(1)
c1.pending_decrement
_wait(10)
]
]
// Expected Output:
// 0.0
// 1.1
// 1.2
// 2.3
// ...
```
**Expected behavior**
After calling `c1.pending_increment(1)` the `c1` coroutine should stop running until I call `c1.pending_decrement`.
**Additional context**
I've done some debugging around this. When I break on the call to `c1.pending_increment`, I see that `c1` already has an `m_pending_count` of 1, which means the coroutine is already on the `SkMind`'s pending list. I simply don't see any glue that stops execution of the coroutine once it is on that list.
Hướng dẫn đóng góp
Hướng nghiên cứu
Tái hiện hành vi của coroutine trong REPL bằng cách sử dụng mẫu và thiết lập UE4 4.22. Theo dõi pending_increment qua danh sách đang chờ của SkMind và kiểm tra cách m_pending_count ảnh hưởng đến việc thực thi; hoàn thành có nghĩa là c1 dừng sau phép tăng và tiếp tục sau pending_decrement, khớp với đầu ra mong đợi.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- cpp, unreal-engine
- Lĩnh vực
- game-dev
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100