Tại sao không thể chỉnh sửa.com (16 bit) trên Windows XP hoặc trong PC ảo trên Windows 7 thoát thành công bằng cách nhấp vào nút đóng?


0

Tại sao không thể chỉnh sửa.com (16 bit, còn gọi là MS-DOS Editor) bằng cách nhấp vào nút đóng trên Windows XP hoặc trong PC ảo trên Windows 7, nhưng có thể chấm dứt thành công bằng cách nhấp vào TệpThoát ?

Ảnh chụp màn hình (không phải bằng tiếng Anh :-)):

Lỗi tương tự trong tiếng Anh:

Hình ảnh bằng tiếng Anh


2
Tôi sẽ khẳng định rằng lý do là nút becase teh sẽ đóng shell, nhưng không phải là thời gian chạy được giải thích thực thi các ứng dụng 16 bit. nó chạy nhanh để chạy htop trong một thiết bị đầu cuối linux, và sau đó đóng cửa sổ. bạn sẽ nhận được một thông báo rằng ngay cả khi vỏ được đóng, htop sẽ tiếp tục chạy và bạn sẽ không thể đóng nó vì vỏ của bạn không còn nữa.
Frank Thomas

Bởi vì ở cấp độ rất cơ bản, bạn phải kích hoạt hành vi gần gũi. Nếu nút đóng không đóng ứng dụng thì nó không được lập trình để làm như vậy.
Ramhound 17/12/13

Một VDM trên Windows NT 5.1 và Virtual PC trên Windows NT 6.1 là hai thứ rất khác nhau. Đây thực sự nên là hai câu hỏi.
JdeBP 17/12/13

1
@JdeBP, chúng không khác nhau. Hệ thống ảo mà anh ta hỏi về chỉ là XP chạy trong VM trong 7. Bản sao khách của XP hoạt động tương tự đối với NTVDM giống như trên kim loại trần.
Synetech 17/12/13

Why edit.com (16 bit, aka MS-DOS Editor) cannot be terminated successfully by clicking the close button on WinXP or in Virtual PC on Win7, but can be terminated successfully by clicking File >> Exit?Điều gì chính xác xảy ra khi nhấp vào nút? Tôi chưa bao giờ gặp bất kỳ vấn đề với điều đó; thực tế, vì NTVDM đã ngừng hoạt động chính xác trên hệ thống XP của tôi, tôi phải đóng một số chương trình nhất định như Chỉnh sửa bằng cách nhấp vào [x]nút.
Synetech 17/12/13

Câu trả lời:


1

Tại sao edit.com có ​​thể bị chấm dứt thành công bằng cách nhấp vào Tệp → Thoát, nhưng không phải bằng cách nhấp vào nút đóng ☒? Tại sao nút đóng gây ra một dấu nhắc để giết nó?

TL; DR

Vì Chỉnh sửa là chương trình DOS, nên Tệp → Thoát không liên quan gì đến Windows hoặc nút.

Các hệ thống con

Windows có hai hệ thống con chính (nếu bạn có khung), một chương trình có thể sử dụng để đơn giản hóa mọi thứ và tránh việc lập trình viên phải làm mọi thứ thủ công và phát minh lại bánh xe. Có hệ thống con Windows tiêu chuẩn và có hệ thống con giao diện điều khiển .

Các chương trình Windows là các chương trình GUI (giao diện người dùng đồ họa), trong khi các chương trình giao diện điều khiển là các chương trình CLI (giao diện dòng lệnh). Đây là những thiết kế rất khác nhau và những gì hoạt động cho một cái không hoạt động cho cái kia.

Hệ thống con Windows

Hệ thống con windows là hệ thống phổ biến hơn và các chương trình có cửa sổ đồ họa và điều khiển sẽ sử dụng điều đó. Trung tâm của chương trình là một vòng lặp thông báo Windows . Sau khi chương trình đã khởi tạo và sẵn sàng để chạy, nó sẽ đi vào một vòng lặp vô hạn nơi nó nằm im, kiên nhẫn chờ đợi điều gì đó xảy ra. Điều này có thể bao gồm đầu vào từ người dùng, hẹn giờ tắt, hoạt động mạng, v.v. Khi Windows phát hiện một số thay đổi mà chương trình phải hoặc có thể muốn phản hồi, nó sẽ gửi tin nhắn cho chương trình đó . Tại thời điểm đó, nếu thông báo là về một cái gì đó mà chương trình quan tâm, nó sẽ trả lời nó bằng một trình xử lý, đây chỉ là một chức năng thực hiện một cái gì đó.

(Đây cũng là cách mà hầu hết các trò chơi hoạt động. Họ sẽ có một vòng lặp trò chơi chính chờ đầu vào từ các nút gamepad, bộ hẹn giờ, v.v. .)

Chương trình Hùng

Thông thường, khi một chương trình nhận được một tin nhắn, nó sẽ xử lý nó hoặc chuyển nó đi. Điều này thường xảy ra nhanh chóng. Tuy nhiên, đôi khi, một chương trình có thể bị treo vì một số lý do, điều này sẽ khiến chương trình không xử lý tin nhắn. Windows có thể phát hiện khi điều này xảy ra và nếu mất quá nhiều thời gian, nó sẽ xem xét chương trình bị đóng băng và đề nghị cho phép người dùng giết chương trình không phản hồi thay vì tắt nó một cách duyên dáng. Điều này có nghĩa là nó sẽ kết thúc đột ngột và không chỉ mất các tệp chưa được lưu mà còn có khả năng khiến các tệp đang mở ở trạng thái không nhất quán, do đó làm hỏng chúng.

Bảng điều khiển hệ thống con

Các chương trình Console khác với các chương trình Windows đồ họa. Chúng đã phát triển từ tổ tiên DOS của chúng và trong khi chúng có được nhiều chức năng mới từ dấu nhắc lệnh của Windows, bên dưới tất cả, chúng hoạt động rất giống các chương trình DOS cũ, bao gồm cả cách chúng khởi động, chạy và tắt.

Kết thúc chương trình

Hãy xem xét điều gì xảy ra khi bạn nhấp vào nút cho cả hai loại chương trình.

Đóng chương trình Windows

Khi bạn bấm vào nút của chương trình Windows, Windows sẽ gửi WM_CLOSEtin nhắn cho chương trình đó . Vòng lặp của chương trình phát hiện thông báo và trả lời bằng cách gọi một hàm thực hiện quy trình chuẩn kết thúc chương trình Windows (hy vọng sau khi thực hiện một số công việc dọn dẹp như giải phóng tài nguyên được phân bổ, lưu tệp, v.v.). Ngoài mọi công việc dọn dẹp, việc định tuyến tắt máy thực tế diễn ra khá nhanh và Windows chuyển sang nhiệm vụ tiếp theo.

Đóng chương trình điều khiển

Khi bạn bấm vào nút của dấu nhắc lệnh, bạn đang nói với dấu nhắc lệnh đóng. Khi nhận được tin nhắn đó, nó sẽ cố gắng đóng lại và nếu bạn đang ngồi im tại dấu nhắc, chắc chắn nó có thể làm như vậy mà không phải đắn đo nhiều. Nhưng điều gì xảy ra nếu bạn có một số chương trình mở và chạy trong dấu nhắc lệnh? Chương trình đó là một quá trình riêng biệt hoàn toàn. Dấu nhắc lệnh không thể giết chương trình đó, nó sẽ không thân thiện với người dùng và có thể làm hỏng dữ liệu hoặc mất các tệp chưa được lưu. Thay vào đó, nó cố gắng truyền thông điệp gần gũi đến chương trình. Có hai kịch bản có thể diễn ra tại thời điểm này:

  • Nếu chương trình là chương trình bảng điều khiển Windows, thì việc gửi nó, thông báo đóng thường sẽ hoạt động ngay lập tức vì nó được biên dịch với hệ thống con bảng điều khiển Windows và trong khi bạn có thể mất một số tệp chưa được lưu, vì nó đang sử dụng mã bảng điều khiển dành riêng cho Windows, có không chậm trễ, và do đó Windows không cần phải dùng đến việc tiêu diệt nó.

  • Tuy nhiên, nếu chương trình là một chương trình DOS (như Chỉnh sửa), thì nó đã được biên dịch để chạy trên DOS và do đó không biết gì về Windows và do đó không đáp ứng, vì vậy Windows nghĩ rằng nó bị treo và đề nghị giết chương trình.

Tệp → Thoát

Với một chương trình Windows, lệnh exit (thường File → Exit) chỉ là bí danh cho WM_CLOSE. Khi bạn thoát khỏi chương trình, nó sẽ nhận được thông báo đóng giống như bạn đã nhấp vào nút đóng.

Với Chỉnh sửa, lệnh exit (cũng File → Exit) không liên quan gì đến Windows. Nó là một chức năng tích hợp sẵn của chính chương trình DOS đó. Vì vậy, khi bạn nhấp vào nút đóng, đó là một điều hoàn toàn khác so với thoát khỏi bên trong Chỉnh sửa, vì vậy nhấp vào không cho biết chương trình đóng.

Kết quả khác nhau

Nhưng tại sao Kevin lại nhận được một kết quả khác với những người khác (và bản thân tôi)? Điều này có thể là do sự khác biệt trong khoảng thời gian chờ mà Windows được cấu hình để sử dụng cho các thói quen phát hiện khi chương trình bị đóng băng. Thực tế có một số cài đặt khác nhau ảnh hưởng đến điều này. Thay đổi (các) cài đặt sẽ khiến Windows phải chờ thêm thời gian hoặc ít hơn trước khi hiển thị hộp thoại.

Tôi sẽ liệt kê tất cả, nhưng trong khi tìm kiếm chúng, cuối cùng tôi đã tìm thấy một bài đăng mà tôi đã thực hiện một lúc trước đó đã liệt kê tất cả, vì vậy nếu có ai quan tâm đến chi tiết, bạn có thể tìm thấy chúng ở đó.


Synetech, câu trả lời tuyệt vời, nhưng xin vui lòng , in đậm / mạnh điểm cuối cùng, bởi vì ... tốt, mọi thứ trong đó có thể được tóm tắt thành "EDIT không biết rằng Windows tồn tại và ngược lại".
Doktoro Reichard

Đẹp, câu trả lời dài, nhưng nó không giải quyết một điểm trung tâm. Cố gắng đóng các ứng dụng DOS không phải lúc nào cũng thất bại. Tôi đã thử đóng edit.comtrên máy Windows XP ngay bây giờ và nó đóng cửa sổ ngay lập tức, loại bỏ những thay đổi tôi đã thực hiện. Nói cách khác, điều này có thể được thực hiện và một cái gì đó phải khác biệt giữa hệ thống của tôi và người hỏi, ví dụ như một cài đặt hoặc cách anh ta chạy edit.com.
nitro2k01

@ nitro2k01, thực sự, đó chính xác là những gì tôi đã nói ; Tôi phải đóng các chương trình DOS như Chỉnh sửa bằng nút đóng vì NTVDM của tôi bị hỏng và tôi không gặp vấn đề gì. Tôi đã viết câu trả lời này dựa trên ảnh chụp màn hình anh ấy thêm vào. Tôi có một ý tưởng về sự khác biệt có thể là gì và tôi sẽ thêm một số thông tin về điều đó.
Synetech
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.