cuốn sách gpt4 ai đã làm

c++ - 异步过程调用中的 GetLastError 竞争

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 01:22:20 25 4
mua khóa gpt4 Nike

Giả sử tôi đang sử dụng APC trong đó cả quy trình và mã gọi đều sử dụng SetLastError và GetLastError. Điều này có thể khiến GetLastError tạo ra các giá trị không thể đoán trước. Có cách nào để giải quyết vấn đề này?

VOID CUỘC GỌI Chức năng của tôi (thông số ULONG_PTR)
{

SetLastError(1);
// Làm một số việc ở đây mất chút thời gian
// Đang mong đợi 1 nhưng tôi có thể/có nên nhận 0 ở đây không?
printf("LastError: %d\n", GetLastError());
}

int APCtry()
{

SetLastError(0);

giả DWORD = 0;

if (! QueueUserAPC(MyFunction, GetCurrentThread(), dummy))
{
return 0;
}

printf("LastError: %d\n", GetLastError());

SleepEx(100, TRUE);

//SetLastError(0); Đã chỉnh sửa và nhận xét

printf("LastError: %d\n", GetLastError());

return 0;
}

câu trả lời hay nhất

Trong MyFunction, bạn phải luôn chuyển 1 là LastError.

APCtry đã tiếp tục hoạt động sau khi MyFunction bắt đầu thực hiện phần việc tốn thời gian...

Đây là một sự nhầm lẫn lớn: tất cả mã của bạn thực thi trong một luồng duy nhất!

SleepEx bắt đầu...
Chức năng của tôi...
Trở lại SleepEx
SetLastError(0); trong APCtry()

Vì vậy SleepEx sẽ không quay trở lại cho đến khi MyFunction hoàn thành. vậy bạn là NgủEx Sau đó set về lỗi cuối cùng (hoặc set nội dung của SleepEx) - đúng Chức năng của tôi Không có tác động - bởi vì nó sẽ chỉ xảy ra Chức năng của tôi Sau đó quá trình xuất khẩu diễn ra. Bạn đang ở Chức năng của tôi Đặt nội dung của lỗi cuối cùng - đây là nơi bạn phải đến đây

biên tập

Để hiểu rõ hơn những gì đang diễn ra bên trong SleepEx: nhập mô tả hình ảnh ở đây

Về c++ - Cuộc đua GetLastError trong lệnh gọi thủ tục không đồng bộ, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/39077198/

25 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress