In USB protocol, there is no way for the USB device to send interrupt or information to the host of it's own. The Host has to ping for data.
Usually the hosts call the DataTransfer APIs to get the data which is called along with a time out. If the data is not available in the device within the timeout the API will fail with timeout error. Then the host needs to call again.
Or you can have a variable (flag) on the device side which is set when the device has data. The host needs to keep polling for this flag. If set, the host should call the datatrasnfer APIs to receive the data. This polling can be done though Vendor Specific Setup Requests. After the host sends vendor specific setup request, the USBSetupCallback is triggered in the device. Inside the callback the device sends the status of the flag.